【问题标题】:Routing API Routes in GolangGolang 中的路由 API 路由
【发布时间】:2020-07-10 23:27:01
【问题描述】:

我希望能够通过单独的文件夹来组织我的所有路线并相应地进行路线。因此,这意味着我可以将所有“用户”API 路由路由到用户目录,在该目录中它们将进一步路由到“用户”功能,而不是将所有 HandleFunc 放在一个区域(并且在一个文件中有 50 条路由),我可以将我所有的“消息”API 路由路由到“消息”目录,在那里它们将进一步路由到“消息”功能等。 因此,如果有人访问 localhost:5000/api/routes/user/getUser,我会将他们定向到 /api/routes/users 中的另一个路由器,然后该路由器将路由到 GetUserHandler()。

我目前拥有的

// main.go
package main

import (
    "net/http"
    "github.com/gorilla/mux"
)

func GetUserHandler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Got a user"))
}

func main() {
    r := mux.NewRouter()
    r.HandleFunc("api/routes/getUser", GetUserHandler)

    http.ListenAndServe(":8000", r)
}

我想做什么

// api/routes/user.go
import (
    "net/http"
    "github.com/gorilla/mux"
)


// somehow route /getUser to this function
func GetUserHandler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Got a user"))
}
// main.go
package main

import (
    "net/http"
    "github.com/gorilla/mux"
)

func main() {
    r := mux.NewRouter()

    // somehow route to to all my user functions
    // the 'User' here is just an example to help illustrate my point
    r.HandleFunc("api/routes/user", User)

    http.ListenAndServe(":8000", r)
}

【问题讨论】:

  • 我不清楚你到底在问什么,但子路由器可能就是你想要的。
  • 你有什么问题?除了您没有正确导入/引用 GetUserHandler 之外,我认为您的操作方式没有任何问题。
  • 与其拥有一个包含 50 条不同路由的文件,不如为所有用户路由提供一个处理程序,该处理程序可以路由到另一条处理我所有用户功能的路由,消息等也是如此。这更有意义?这样我就可以有一个文件,其中包含一些用于用户、消息等的不同“主要”路由,这些路由将路由到包含其所有功能的另一个目录。

标签: rest go routes


【解决方案1】:

您不能在物理上将它们分开,但可以在逻辑上将它们分开(以增加可读性):

r := mux.NewRouter()
r.HandleFunc("/account/{key}", AccountHandler)
r.HandleFunc("/category/{key}", CategoryHandler)

如果您查看上面的代码,这是注册路由所必需的(您已经知道 :-))。所以这里有一个模式,这将有助于将路由分开到各自的文件夹。您可以通过将路由定义为键并将函数定义为值来使用 Golang 的地图功能。这样,您可以将它们写入各自的文件夹,而不是将 100 条路由写入单个文件。

我确实写了一个逻辑分离的例子:https://gitlab.com/nerdyram/test-gorilla-mux

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    相关资源
    最近更新 更多