Go语言HTTP接口URL参数获取为空:请求排查帮助
问题排查与解决
我来帮你理清这个问题——你现在的核心问题是混淆了URL查询参数(Query String)和路由路径参数的获取方式,同时错误地尝试从请求头里拿根本不存在的参数。咱们一步步拆解:
1. 为什么你现在拿不到参数?
mux.Vars(r)["store_id"]:这个方法是用来获取路由路径参数的,也就是你在路由里定义的/{store_id}这种占位符参数。但你的路由是/getTopProducts,根本没有定义路径参数,所以自然返回空字符串。r.Header.Get("store_id"):你是从请求头里取参数,但你的请求是把store_id放在URL的查询串(?store_id=xxx)里,并没有在请求头里携带这个字段,所以这里也返回空。
2. 正确的获取方式
你的请求参数是URL查询参数,应该用r.URL.Query().Get("store_id")来获取。修改后的代码如下:
func GetTopProducts(w http.ResponseWriter, r *http.Request) { // 获取URL查询参数中的store_id storeID := r.URL.Query().Get("store_id") fmt.Println(storeID) // 现在会打印storeidteststring w.Header().Set("Server", storeID) w.WriteHeader(http.StatusOK) }
3. 额外说明:两种参数的区别
如果你的需求是用路径参数(比如URL是localhost:8081/getTopProducts/storeidteststring),那你需要修改路由定义:
myRouter.HandleFunc("/getTopProducts/{store_id}", db.GetTopProducts).Methods("GET")
这时才能用mux.Vars(r)["store_id"]来获取参数。但根据你当前的请求URL,显然你用的是查询参数,所以不需要改路由,只用上面的r.URL.Query().Get()即可。
内容的提问来源于stack exchange,提问作者John Doah
相关产品推荐
相关产品推荐

