在之前的方法中,配置路由、处理数据都在 main.go 文件中进行,当遇到稍大的项目时维护就会十分吃力,也难以团队协作,所以我们现在需要进行路由分组和文件抽离

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package main

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

func main() {

r := gin.Default()

//前台路由
r.GET("/", func(c *gin.Context) {
c.String(200, "首页")
})
r.GET("/news", func(c *gin.Context) {
c.String(200, "新闻")
})

//后台路由
r.GET("/admin", func(c *gin.Context) {
c.String(200, "后台首页")
})
r.GET("/admin/user", func(c *gin.Context) {
c.String(200, "设置用户")
})
r.GET("/admin/article", func(c *gin.Context) {
c.String(200, "新闻列表")
})

//api 路由
r.GET("/api", func(c *gin.Context) {
c.String(200, "我是一个api接口")
})
r.GET("/api/userlist", func(c *gin.Context) {
c.String(200, "我是一个api接口--userlist")
})
r.GET("/api/plist", func(c *gin.Context) {
c.String(200, "我是一个api接口--plist")
})

r.Run()

}

一、路由分组

以上面的代码为例,我们可以按照前台、后台和 api 接口三个模块来分组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main

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

func main() {

r := gin.Default()

//前台路由
defaultRouters := r.Group("/")
{
defaultRouters.GET("/", func(c *gin.Context) {
c.String(200, "首页")
})
defaultRouters.GET("/news", func(c *gin.Context) {
c.String(200, "新闻")
})
}

//后台路由
adminRouters := r.Group("/admin")
{
adminRouters.GET("/", func(c *gin.Context) {
c.String(200, "后台首页")
})
adminRouters.GET("/user", func(c *gin.Context) {
c.String(200, "设置用户")
})
adminRouters.GET("/article", func(c *gin.Context) {
c.String(200, "新闻列表")
})
}

//api 路由
apiRouters := r.Group("/api")
{
apiRouters.GET("/", func(c *gin.Context) {
c.String(200, "我是一个api接口")
})
apiRouters.GET("/userlist", func(c *gin.Context) {
c.String(200, "我是一个api接口--userlist")
})
apiRouters.GET("/plist", func(c *gin.Context) {
c.String(200, "我是一个api接口--plist")
})
}

r.Run()

}

二、路由文件抽离

接下来继续抽离,把路由组抽离到其他文件中

新建routers文件夹,并依照3个路由组新建 go 文件

1
2
3
4
5
6
7
8
9
test
│ go.mod
│ go.sum
│ main.go

└─routers
adminRouters.go
apiRouters.go
defaultRouters.go

文件内容以defaultRouters.go为例,注意函数开头大写,因为要在main.go中调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package routers

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

func DefaultRoutersInit(r *gin.Engine) {
//前台路由
defaultRouters := r.Group("/")
{
defaultRouters.GET("/", func(c *gin.Context) {
c.String(200, "首页")
})
defaultRouters.GET("/news", func(c *gin.Context) {
c.String(200, "新闻")
})
}
}

现在,只需在main.go中调用 routers 包中的函数即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import (
"test/routers"

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

func main() {

r := gin.Default()

//前台路由
routers.DefaultRoutersInit(r)

//后台路由
routers.AdminRoutersInit(r)

//api 路由
routers.ApiRoutersInit(r)

r.Run()

}