我正在尝试测试处理程序,该处理程序如下:
router.HandleFunc("/address/{id}", DeletePerson).Methods("DELETE")
我创建的请求是:
request, _ := http.NewRequest("DELETE", "/address/2", nil)
DeletePerson(response, request)
我尝试使用github.com/gorilla/mux提取“ id”
params = mux.Vars(request)
item := params["id"]
returns: params = map[] and item = ""
但是,如果我使用curl命令调用DeletePerson:
curl -X DELETE http://localhost:8000/address/2
我得到:params = map [“ id”]和item =“ 2”
我如何构造一个URL请求来获得类似Curl的结果?
答案 0 :(得分:0)
如果直接调用DeletePerson
,则请求不会通过路由器,后者会解析请求路径中的参数。
此外,http.NewRequest
返回一个客户请求。将方案和主机添加到URL,然后将请求传递到http.Client.Do
,或使用httptest.NewRequest直接创建服务器请求。
NewRequest返回一个新的传入服务器请求,适合传递给http.Handler进行测试。
request := httptest.NewRequest("DELETE", "/address/2", nil)
mux.ServeHTTP(response, request)
答案 1 :(得分:0)
我认为问题在于您没有在请求中放入完整的URL。而且我猜您在执行请求时会忽略该错误。如果您未输入完整的URL,它将抱怨类似以下内容:panic: Delete /address/2: unsupported protocol scheme ""
以下代码在我的机器上可以正常运行:
package main
import "net/http"
func main() {
r, err := http.NewRequest("DELETE", "http://localhost:8080/address/2", nil)
if err != nil {
panic(err)
}
if _, err := http.DefaultClient.Do(r); err != nil {
panic(err)
}
}
希望这会有所帮助:)