基于@Andy 的想法,我提出了一个支持可拆卸嵌套路由的解决方案。
当前文件夹结构如下:
.
├── routes
│ ├── index.go
│ └── music.go
└── server.go
...server.go
项目主入口在哪里,属于main
包,而index.go
和music.go
属于routes
包。
端点是
"/api" -> index.go
"/api/music" -> music.go
首先,index.go
我们定义了一个在这个级别使用路由的函数。
func UseRoute(group *echo.Group, routes func(group *echo.Group)) {
routes(group)
}
然后,
在server.go
func main() {
e := echo.New()
apiGroup := e.Group("/api")
routes.ActivateIndex(mainGroup)
}
在index.go
var mainGroup *echo.Group
func ActivateIndex(g *echo.Group) {
mainGroup = g
UseRoute(mainGroup, IndexRoutes)
// sub routes
musicGroup := mainGroup.Group("/music")
ActivateMusic(musicGroup)
}
并且在music.go
var musicGroup *echo.Group
func ActivateMusic(g *echo.Group) {
musicGroup = g
UseRoute(musicGroup, MusicRoutes)
}
注意:IndexRoutes
等MusicRoutes
是在此级别指定端点的函数。
例如
func IndexRoutes(group *echo.Group) {
group.GET("/", sayHello)
group.GET("/user/:id", getDetail)
group.POST("/user", addUser)
}
这样就可以在不同.go
的文件中定义路由,让业务逻辑更加清晰。
例如,要扩展嵌套级别,我们可以在 中创建另一个ActivateHiphop
函数,同时在函数 fromhiphop.go
处导入新的子路由,以便可以指向。ActivateMusic
music.go
"/api/music/hiphop"
hiphop.go
ps 要在关卡中添加更多路由,只需在函数/api
中创建更多端点即可。IndexRoutes