我正在使用mux实现Rest api。在验证了一些参数之后,我试图用一些默认值填充缺少的参数,我稍后通过处理请求的方法处理,但是,我注意到手动设置查询参数没有任何效果,除非原始查询是直接的改变了有点hacky:
func ValidateParameters(r *http.Request) (bool) {
test := r.URL.Query().Get("test")
// if test is not provided set some default value
if test == "" {
r.URL.Query().Set("test", "Test1") //not working
r.URL.Query().Add("test", "Test2") //not working
r.URL.RawQuery = r.URL.RawQuery + "&Test=Test3" // the only method working
}
// more code
}
处理程序在另一个文件中,所以我希望能够执行test := r.URL.Query().Get("test")
并获取我在请求处理程序调用的ValidateParameters
中设置的值,但这不起作用。
对此有何解释?任何解决方法?
谢谢。
问题是r.URL.Query()
解析url,创建参数映射并返回它。这是通过每次.Query()
调用完成的。
这应该工作:
params := r.URL.Query()
params.Set("key", "value")
r.URL.RawQuery = params.Encode()