亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從其他包導入子路由

如何從其他包導入子路由

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 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號