在revel框架中读取http查询参数须用params.query.get()或c.params.query.all(),不可用params.get();支持单值获取、批量转map及结构体绑定,绑定时字段必须导出并用param标签映射。

在Revel框架中读取HTTP请求的查询字符串参数,需明确区分GET请求路径后的?后参数与POST表单数据,直接调用Params.Get()无法获取未注册的查询参数,必须使用Params.Query.Get()或c.Params.Get("query")等正确入口。
使用Params.Query.Get读取单个查询参数
第一步:在Controller方法内,通过c.Params.Query.Get("key")获取URL中?后的键值。例如请求为/user?id=123&name=john,c.Params.Query.Get("id")返回"123"。
这一步必须在Action方法体内执行,不能在Init或Intercept方法中提前调用,因为Params.Query在请求解析完成前为空。
c.Params.Query.Get("name")返回"john",若参数不存在则返回空字符串,不会panic。
批量读取全部查询参数到map
方法一:遍历c.Request.URL.Query()
直接访问标准库的url.Values:queryMap := c.Request.URL.Query(),它返回map[string][]string类型,每个键对应一个参数名,值是该参数所有出现的值组成的切片。
注意:如果URL中同一参数出现多次(如?tag=a&tag=b),queryMap["tag"]会是[]string{"a","b"},而c.Params.Query.Get只取第一个。
方法二:用revel.Params.Query.All()(Revel 1.0+)
调用c.Params.Query.All()获得map[string]string,自动对每个键取第一个值并转为字符串,适合简单场景,但丢失重复参数信息。
解析查询参数为结构体(绑定)
第一步:定义目标结构体,字段名需与查询参数名一致,且导出(首字母大写)
第二步:在Action中声明变量,如var input struct{ID int `param:"id"` Name string `param:"name"`},字段标签param指定映射的查询参数名
第三步:调用c.Params.Bind(&input, "query"),Revel会自动将查询参数按param标签匹配并转换类型;ID字段会尝试把"id"参数转为int,失败则置零且不报错
【必须确保结构体字段是导出的,否则Bind无法设置值】











