2016-01-20 107 views
1

因此,我正在使用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, 
    }, 
} 
+0

我能夠重現這一點,現在它與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()' –

+0

添加.GetError()沒有返回與我目前看到的不同的東西。 – CGideon

+0

奇怪......我做的最後一件事情就是在註冊路由時除去'.Name()'函數調用。試試這樣做,並確保你沒有緩存響應。 –

回答

0

看來,我的項目是持有到主src目錄舊版本的Router.go和Handlers.go文件。通過刪除這些重複的文件並重新運行Main.go並運行Main.go,我就可以獲取要識別的路徑。

+1

請勿使用相對導入。始終通過完整路徑導入以避免此問題和其他問題。 – JimB

+0

感謝指針@JimB我真的很感激它 – CGideon

相關問題