所以,我正在使用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返回欢迎!但转到localhost:8080 / candidate返回404 Page Not Found错误。我感谢任何输入和帮助!谢谢!
这是我的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,
},
}
答案 0 :(得分:0)
看来我的项目在主src目录中保留了旧版本的Router.go和Handlers.go文件。通过删除这些重复文件并使用go run Main.go重新运行Main.go,我能够获得要识别的路径。