如何从其他包中导入子路线

时间:2019-10-01 13:43:16

标签: rest go routes middleware go-echo

而不是像main那样在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 个答案:

答案 0 :(得分:0)

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)
}

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

您需要吗?

答案 1 :(得分:0)

您可以做的是使用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)
    // ...
}

答案 2 :(得分:0)

基于@Andy的想法,我提出了一个支持可分离的嵌套路由的解决方案。

当前文件夹结构如下:

server.go

...其中main是项目的主要条目,属于index.go包,而music.goroutes属于"/api" -> index.go "/api/music" -> music.go 包。 / p>

端点是

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

注意:MusicRoutesfunc IndexRoutes(group *echo.Group) { group.GET("/", sayHello) group.GET("/user/:id", getDetail) group.POST("/user", addUser) } 等是在此级别上指定端点的函数。

例如

.go

通过这种方式,可以在不同的ActivateHiphop文件中定义路由,从而使业务逻辑更加清晰。

例如,要扩展嵌套级别,我们可以在hiphop.go中创建另一个ActivateMusic函数,还可以从music.go的{​​{1}}函数处导入新的子路由,这样"/api/music/hiphop"可以指向hiphop.go

p.s。要在/api级添加更多路由,只需在IndexRoutes函数中创建更多端点即可。