1

而不是在 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
    // ...
}
4

3 回答 3

5

您可以做的是使用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)
    // ...
}
于 2019-10-30T22:26:58.417 回答
1

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

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

你需要它吗?

于 2019-10-01T14:12:58.463 回答
1

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

当前文件夹结构如下:

.
├── routes
│   ├── index.go
│   └── music.go
└── server.go

...server.go项目主入口在哪里,属于main包,而index.gomusic.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)
}

注意:IndexRoutesMusicRoutes是在此级别指定端点的函数。

例如

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

于 2020-02-22T17:53:59.023 回答