go - 无法为 rest api 手动设置查询参数(使用 mux)

标签 go mux

我正在使用 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()

关于go - 无法为 rest api 手动设置查询参数(使用 mux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52170547/

相关文章:

go run 命令没有提供足够的信息来调试

go - Go 中的换行符 - 从 Go Tour 中理解这个例子

conditional - 使用稍后在 verilog 中定义的条件变量

string - slice 起始位置大于字符串的长度

go - 根据另一个 slice 中元素的顺序对 slice 进行排序

http - 何时使用 Golang 的默认 MUX 与使用自己的 MUX

audio - GStreamer:将虚拟音轨添加到接收到的 rtp 流

golang 预检请求错误

rest - 如何将参数传递给MiddlewareFunc?

go - 如何使用golang中的zlib来配合c中的zlib?