因此,我正在使用Go和Gorilla Mux一個簡單的RESTful API。我遇到了第二條路線無法工作的問題,它返回了404錯誤。我不確定是什麼問題,因爲我是Go和Gorilla的新手。我確定這件事很簡單,但我似乎無法找到它。我認爲這可能是一個問題,因爲我使用了不同的自定義軟件包。大猩猩多路複用器路線不解決
這個問題是相似的,Routes returning 404 for mux gorilla,但接受的解決方案並沒有解決我的問題
這裏是我的代碼如下所示:
Router.go:
package router
import (
"github.com/gorilla/mux"
"net/http"
)
type Route struct {
Name string
Method string
Pattern string
HandlerFunc http.HandlerFunc
}
type Routes []Route
func NewRouter() *mux.Router {
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
router.
Methods(route.Method).
Path(route.Pattern).
Name(route.Name).
Handler(route.HandlerFunc)
}
return router
}
var routes = Routes{
Route{
"CandidateList",
"GET",
"/candidate",
CandidateList,
},
Route{
"Index",
"GET",
"/",
Index,
},
}
Handlers.go
package router
import (
"fmt"
"net/http"
)
func Index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Welcome!")
}
func CandidateList(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "CandidateList!")
}
Main.go
package main
import (
"./router"
"log"
"net/http"
)
func main() {
rout := router.NewRouter()
log.Fatal(http.ListenAndServe(":8080", rout))
}
去localhost:8080返回Welcome!但去本地主機:8080 /候選人返回404頁未找到錯誤。我感謝任何意見和幫助!謝謝!
這是我的Router.go文件的更新版本,仍然有相同的問題發生。
Router.go
package router
import (
"github.com/gorilla/mux"
"net/http"
)
type Route struct {
Method string
Pattern string
HandlerFunc http.HandlerFunc
}
type Routes []Route
func NewRouter() *mux.Router {
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
router.
Methods(route.Method).
Path(route.Pattern).
Handler(route.HandlerFunc).GetError()
}
return router
}
var routes = Routes{
Route{
"GET",
"/candidate",
CandidateList,
},
Route{
"GET",
"/",
Index,
},
}
我能夠重現這一點,現在它與OP發佈的相同代碼一起工作。嘗試使用[GetError()](http://www.gorillatoolkit.org/pkg/mux#Route.GetError)來查看註冊路由是否會給您帶來任何問題。例如: 'err:= router.Methods(route.Method).Path(route.Pattern).Name(route.Name).Handler(route.HandlerFunc).GetError()' –
添加.GetError()沒有返回與我目前看到的不同的東西。 – CGideon
奇怪......我做的最後一件事情就是在註冊路由時除去'.Name()'函數調用。試試這樣做,並確保你沒有緩存響應。 –