在我的 API 中,我将为每个路径提供许多完全独立的处理程序,例如“/api/v1/handler_one”和“/api/v1/handler_two”。我试图将每个处理程序放在它自己的包中,以使其更易于维护。
我添加了一个示例。它不工作,因为它甚至没有加载“handlers/handler_one.go”。我错过了什么?
主.go
package main
import (
"net/http"
"git/myapp/router"
)
func main() {
myRouter := router.APIRouter
srv := &http.Server{
Handler: myRouter,
Addr: "0.0.0.0:8080",
}
log.Fatal(srv.ListenAndServe())
}
路由器/router.go
package router
import (
"github.com/gorilla/mux"
)
var Router = mux.NewRouter().StrictSlash(true)
var APIRouter = Router.PathPrefix("/api/v1").Subrouter()
handlers/handler_one.go
package handler_one
import (
"git/myapp/router"
)
type Route struct {
Name string
Method string
Pattern string
HandlerFunc http.HandlerFunc
}
type APIRoutes []Route
var apiRoutes = APIRoutes{
Route{ "OneIndex", "GET", "/one", OneIndex, },
}
func init() {
// Register routes
for _, route := range apiRoutes {
var handler http.Handler
handler = route.HandlerFunc
handler = Logger(handler, route.Name)
router.APIRouter.
Methods(route.Method).Path(route.Pattern).Name(route.Name).Handler(handler)
}
}
// OneIndex is handling the requests to /api/v1/one
func OneIndex(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
fmt.Println("Doing something...")
}
最佳答案
It's not working since it's not even loading "handlers/handler_one.go"
你的意思是handlers/handler_one.go
中的init
函数没有被执行?
这是预料之中的,因为在您粘贴的代码中您没有在任何地方导入该包。
尝试在您的 main.go
中导入该包。
如果导入它的唯一原因是运行 init
函数,您可以导入为 _
。
关于go - 在外部包中注册 Golang gorilla/mux 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418576/