我在Golang应用程序中使用gorilla/mux
来检索路由中的变量,如下所示:
func main() {
router := mux.NewRouter()
router.HandleFunc("/items/{name}", itemHandler)
log.Fatal(http.ListenAndServe(":5000", router)
}
func itemHandler(w http.ResponsWriter, r *http.Request) {
name := mux.Vars(r)["name"]
fmt.Println("name is: ", name)
}
如果我导航到本地VM上的/items/super%20duper
,则控制台输出为name is: super duper
,正如我所料。但是当我在我们的Elastic Beanstalk实例上运行它并转到相同的URL时,控制台输出为name is: super%20duper
。
我们尝试更改nginx配置中的proxy_pass
条目,可能nginx没有完全按照收到的方式传递请求URI,但这没有任何效果。
如果其他人看到同样的问题,我很想知道你是如何解决它的。
答案 0 :(得分:2)
您可以使用" net / url"中的func QueryUnescape(s string) (string, error)
包:
QueryUnescape执行QueryEscape的逆变换, 将%AB转换为字节0xAB和' +'进入' ' (空间)。它回来了 如果任何%后面没有两个十六进制数字,则会出错。
package main
import (
"fmt"
"net/url"
)
func main() {
s, err := url.QueryUnescape("super%20duper")
if err != nil {
panic(err)
}
fmt.Println(s) // super duper
}
输出:
super duper