如何从其他包导入子路由

而不是在 main() 下编写每条路线,例如


func main() {

    e := echo.New()

    e.GET("/api", sayHello)

    e.GET("/api/music", getMusic)

    e.GET("/api/user/:id", getDetail)

    e.POST("/api/user", addUser)

    // ...

}

如何从名为 的文件中导入这些所有子路由api.go,并在主函数中使用它们?如同


import "./API"

func main() {

    e := echo.New()

    e.UseSubroute(API.Routes) // <-- similar to this

    // ...

}


慕莱坞森
浏览 90回答 3
3回答

慕容森

您可以做的就是使用echo.Group并将其传递给api包,并在那里初始化路由处理程序。package apiimport (&nbsp; &nbsp; "github.com/labstack/echo")func UseSubroute(group *echo.Group)&nbsp; {&nbsp; &nbsp; group.GET("/", sayHello)&nbsp; &nbsp; group.GET("/music", getMusic)&nbsp; &nbsp; group.GET("/user/:id", getDetail)&nbsp; &nbsp; group.POST("/user", addUser)}主要是你可以导入你的api包。package mainimport (&nbsp; &nbsp; "github.com/labstack/echo"&nbsp; &nbsp; "your-repo/path-to/api" // your api package)func main() {&nbsp; &nbsp; e := echo.New()&nbsp; &nbsp; apiGroup := e.Group("/api")&nbsp; &nbsp; api.UseSubroute(apiGroup)&nbsp; &nbsp; // ...}

胡说叔叔

Echo对象没有这个方法。我想你需要代码吗?API.go:package mainimport "github.com/labstack/echo"func UseSubroute(echo *echo.Echo)&nbsp; {&nbsp; &nbsp; echo.GET("/api", sayHello)&nbsp; &nbsp; echo.GET("/api/music", getMusic)&nbsp; &nbsp; echo.GET("/api/user/:id", getDetail)&nbsp; &nbsp; echo.POST("/api/user", addUser)}main.go:package mainimport "github.com/labstack/echo"func main() {&nbsp; &nbsp; e := echo.New()&nbsp; &nbsp; UseSubroute(e)}这两个文件需要放在同一目录下。你需要它吗?

侃侃尔雅

我提出了一个解决方案,支持可拆卸的嵌套路由。当前文件夹结构如下:.├── routes│   ├── index.go│   └── music.go└── server.go...whereserver.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.gofunc main() {    e := echo.New()    apiGroup := e.Group("/api")    routes.ActivateIndex(mainGroup)}在index.govar mainGroup *echo.Groupfunc ActivateIndex(g *echo.Group) {    mainGroup = g    UseRoute(mainGroup, IndexRoutes)    // sub routes    musicGroup := mainGroup.Group("/music")    ActivateMusic(musicGroup)}并在music.govar musicGroup *echo.Groupfunc 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中导入新的子路由,以便可以指向。ActivateMusicmusic.go"/api/music/hiphop"hiphop.gops 要在关卡中添加更多路由/api,只需在函数中创建更多端点即可IndexRoutes。
打开App,查看更多内容
随时随地看视频慕课网APP