为了账号安全,请及时绑定邮箱和手机立即绑定

如何从其他包导入子路由

如何从其他包导入子路由

Go
慕莱坞森 2023-07-26 17:24:21
而不是在 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    // ...}
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

您可以做的就是使用echo.Group并将其传递给api包,并在那里初始化路由处理程序。


package api


import (

    "github.com/labstack/echo"

)


func UseSubroute(group *echo.Group)  {

    group.GET("/", sayHello)

    group.GET("/music", getMusic)

    group.GET("/user/:id", getDetail)

    group.POST("/user", addUser)

}

主要是你可以导入你的api包。


package main


import (

    "github.com/labstack/echo"

    "your-repo/path-to/api" // your api package

)


func main() {

    e := echo.New()

    apiGroup := e.Group("/api")

    api.UseSubroute(apiGroup)

    // ...

}


查看完整回答
反对 回复 2023-07-26
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

Echo对象没有这个方法。我想你需要代码吗?


API.go:


package main


import "github.com/labstack/echo"


func UseSubroute(echo *echo.Echo)  {

    echo.GET("/api", sayHello)

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

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

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

}

main.go:


package main


import "github.com/labstack/echo"


func main() {

    e := echo.New()

    UseSubroute(e)

}

这两个文件需要放在同一目录下。


你需要它吗?


查看完整回答
反对 回复 2023-07-26
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

我提出了一个解决方案,支持可拆卸的嵌套路由。


当前文件夹结构如下:


.

├── 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.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中导入新的子路由,以便可以指向。ActivateMusicmusic.go"/api/music/hiphop"hiphop.go


ps 要在关卡中添加更多路由/api,只需在函数中创建更多端点即可IndexRoutes。


查看完整回答
反对 回复 2023-07-26
  • 3 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信