在之前的方法中,配置路由、处理数据都在 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, "新闻列表") })
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, "新闻列表") }) }
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)
routers.ApiRoutersInit(r)
r.Run()
}
|
