大猩猩Mux路线无法解决

时间:2016-01-20 21:32:29

标签: go gorilla

所以,我正在使用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,
    },
}

1 个答案:

答案 0 :(得分:0)

看来我的项目在主src目录中保留了旧版本的Router.go和Handlers.go文件。通过删除这些重复文件并使用go run Main.go重新运行Main.go,我能够获得要识别的路径。