Golang使用mux获取URL参数时如何直接提取参数值而非完整键值串
解决方法
不需要用正则提取参数,出现这个问题是参数获取方式和路由定义不匹配导致的,对应两种常见场景调整即可:
- 如果要获取的是路径段参数(也就是作为URL路径组成部分的参数,比如请求路径为
/user/profile/username,username是路径的固定分段)
你现在拿到完整user=username字符串,是因为路由注册时的占位符写法有误。正确的路由注册方式如下:
路由定义正确的前提下,原有代码里的// 注册路由时用{参数名}标记对应路径段的占位符 r.HandleFunc("/user/profile/{user}", UserHandler)mux.Vars(r)["user"]会直接返回纯参数值username,不会携带user=前缀。 - 如果要获取的是URL查询参数(也就是跟在?后面的键值对,比如请求路径为
/user/profile?user=username,参数不属于路径分段)
这类参数不属于mux路由路径匹配的范围,不需要调用mux.Vars()获取,直接用Go标准库原生方法就能直接拿到参数值:// 读取查询参数,直接返回值username user := r.URL.Query().Get("user")
你当前遇到的问题,本质是路由注册时错误用通配符把?后面的整段查询字符串都匹配进了
{user}占位符,才会拿到完整的键值对字符串,调整路由定义或者换用标准库查询参数读取方法即可,完全不需要手写正则做字符串切割。
内容的提问来源于stack exchange,提问作者micah
相关产品推荐
相关产品推荐

