如何在Go中调用子路径端点而不调用主路径?

  • 本文关键字:路径 调用 端点 Go go
  • 更新时间 :
  • 英文 :


我在使用gorilla/mux时遇到了一个问题。

我已经声明了一个端点和特定的子路径,但是当我试图调用子路径之前调用它的主路径,它返回给我一个404错误。

这就是我的schema:

main.go:services.StartRestService()

on services package:

func StartRestService() {
log.Println("Loading Rest Service")
router := mux.NewRouter()
router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { mainHandleRequests(w, r, router) }).Methods("GET")
http.Handle("/", router)
log.Fatal(http.ListenAndServe(":8083", router)) 
}

在同一个服务包中的另一个go文件上:

func homePage(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to the HomePage!")
fmt.Println("Endpoint Hit: homePage")
}
func pong(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Pong!")
fmt.Println("Endpoint Hit: pong")
}
func mainHandleRequests(w http.ResponseWriter, r *http.Request, router *mux.Router) {
homePage(w, r)
router.HandleFunc("/ping", pong)
}

运行我的应用程序,如果我尝试调用http://localhost:8083/ping,它返回我404未找到。只有当我调用http://localhost:8083,然后调用ping端点时,它才能工作。

怎么了?

是的,直到mainhandlerrequests被调用一次,路由器才会意识到/ping端点。

因此,路由器应该被设置好,然后不能被来电以任何方式触摸或改变。

我已经重构了你的代码:

func homePageHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to the HomePage!")
fmt.Println("Endpoint Hit: homePage")
}
func pongHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Pong!")
fmt.Println("Endpoint Hit: pong")
}
func main() {
log.Println("Loading Rest Service")
router := mux.NewRouter()
router.Path("/").Methods(http.MethodGet).HandlerFunc(homePageHandler)
router.Path("/ping").Methods(http.MethodGet).HandlerFunc(pongHandler)
log.Fatal(http.ListenAndServe(":8083", router))
}

最新更新