2014-10-30 48 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