2014-10-30 34 views
1

例如,我有一個請求:Golang:獲取未命名PARAMS

POST /api/users/1/categories/2/posts/3 

我如何可以訪問此PARAMS?

我已經試過:

req.ParseMultipartForm(defaultMaxMemory) 

req.Form.Get("id") 
req.Form.Get("1") 
req.Form.Get("_1") 

但它不工作。

約GET同樣的問題:

GET /api/users/1/categories/2/posts/3 

如何獲得未命名PARAMS?

req.URL.Query().Get(???) 
+0

ParseMultipartForm是解析形式來自請求主體的字段。您正在嘗試解析請求URL。 – Swoogan 2014-10-31 19:00:58

回答

4

如果您使用的是默認的HTTP服務器庫,你需要解析URL路徑的部分,並提取它們。

有像Gorilla Mux這樣的庫(我個人喜歡)可以用來自動添加這個邏輯。 http://www.gorillatoolkit.org/pkg/mux

使用大猩猩/多路複用器,在您註冊的處理程序,您註冊它像這樣:

r := mux.NewRouter() 
r.HandleFunc("/api/users/{userId}/categories/{categoryId}/posts/{postId}", 
      MyHandler) 

然後在你的處理器,你可以訪問它們:

vars := mux.Vars(request) 
userId := vars["userId"] 
// etc... 
+0

我正在使用'martini',這個功能也在哪裏,但是我需要在我的'middleware'中得到這個參數,它不起作用 – cnaize 2014-10-30 09:23:10

+0

@cnaize然後你需要自己拆分url路徑並訪問它們。如果您需要幫助,我會將其添加到我的答案中。 – 2014-10-30 09:45:54

+0

哦,它會很有用 – cnaize 2014-10-31 07:04:29