golang学习之gin--第四篇:路由拆分与注册


一、路由拆分成单独文件或包

当项目的规模增大后就不太适合继续在项目的main.go文件中去实现路由注册相关逻辑了,我们会倾向于把路由部分的代码都拆分出来,形成一个单独的文件或包

1、定义并注册路由

我们在routers.go文件中定义并注册路由信息
代码如下(示例):

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func helloHandler(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
        "message": "Hello www.topgoer.com!",
    })
}

func setupRouter() *gin.Engine {
    r := gin.Default()
    r.GET("/topgoer", helloHandler)
    return r
}

2、main.go文件

在main.go中调用上面定义好的setupRouter函数:
代码如下(示例):

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

func main() {
	e := gin.Default()
	r := setupRouter()
	if err := r.Run(); err != nil {
		fmt.Println("startup service failed, err:%v\n", err)
	}
	// 运行
	e.Run(":8080")
}
3、此时的目录结构:

在这里插入图片描述
结果(示例):
在这里插入图片描述

4、把路由单独拆分成包

拆分后的目录结构如下:
在这里插入图片描述
routers/login.go需要注意此时setupRouter需要改成首字母大写
代码如下(示例):

package routers

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func helloHandler(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"message": "Hello111",
	})
}

// SetupRouter 配置路由信息
func SetupRouter() *gin.Engine {
	r := gin.Default()
	r.GET("/topgoer", helloHandler)
	return r
}

main.go 代码如下(示例):

package main

import (
	"demo/src/routers"
	"fmt"
)

func main() {
	r := routers.SetupRouter()
	if err := r.Run(); err != nil {
		fmt.Println("startup service failed, err:%v\n", err)
	}
}

5、结果如下:

(示例):
在这里插入图片描述

二、路由拆分成多个文件

当我们的业务规模继续膨胀,单独的一个routers文件或包已经满足不了我们的需求了,我们可以分开定义多个路由文件:

1、此时的目录结构:

在这里插入图片描述

2、routers/login.go

routers/login.go中添加一个LoadLogin的函数,将login相关的路由注册到指定的路由器:

login.go代码如下(示例):

package routers

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func LoadLogin(e *gin.Engine) {
	e.GET("/login", login)
}

func login(e *gin.Context) {
	e.String(http.StatusOK, "login-登录接口")
}

2、routers/user.go

routers/user.go中添加一个LoadUser的函数,将user相关的路由注册到指定的路由器:

user.go代码如下(示例):

package routers

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func LoadUser(e *gin.Engine) {
	e.GET("/userinfo", userinfo)
}

func userinfo(e *gin.Context) {
	e.String(http.StatusOK, "userinfo-用户详情接口")
}
3、在main函数中实现最终的注册逻辑如下:

main.go代码如下(示例):

package main

import (
	"demo/src/routers"
	"fmt"
	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()
	routers.LoadUser(r)
	routers.LoadLogin(r)
	if err := r.Run(); err != nil {
		//  输出错误
		fmt.Println("startup service failed, err:%v\n", err)
	}
}

4、结果如下:

(示例):
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值