英文:
How to get value of array key from query in golang
问题
我有一个查询
site.com/?status[0]=1&status[1]=2&status[1]=3&name=John
我想要获取 status 键的所有值,如下所示
> 1, 2, 3
我尝试了以下代码
for _, status:= range r.URL.Query()["status"] {
fmt.Println(status)
}
但是只有在查询中没有数组键时才有效:site.com/?status=1&status=2&status=3&name=John
英文:
I have this query
site.com/?status[0]=1&status[1]=2&status[1]=3&name=John
I want to get all the values of status key like
> 1, 2, 3
I tried something like this
for _, status:= range r.URL.Query()["status"] {
fmt.Println(status)
}
but it only works if the query is without array key: site.com/?status=1&status=2&status=3&name=John
答案1
得分: 14
一种方法是循环遍历可能的值,并在遍历过程中将其追加到切片中:
r.ParseForm() // 解析请求体和查询,并将结果存储在r.Form中
var a []string
for i := 0; ; i++ {
key := fmt.Sprintf("status[%d]", i)
values := r.Form[key] // 表单值是一个字符串切片
if len(values) == 0 {
// 没有更多的值
break
}
a = append(a, values[i])
i++
}
如果你对查询字符串有控制权,可以使用以下格式:
site.com/?status=1&status=2&status=3&name=John
并使用以下代码获取status的值:
r.ParseForm()
a := r.Form["status"] // a 是 []string{"1", "2", "3"}
英文:
One approach is to loop over the possible values and append to a slice as you go:
r.ParseForm() // parses request body and query and stores result in r.Form
var a []string
for i := 0; ; i++ {
key := fmt.Sprintf("status[%d]", i)
values := r.Form[key] // form values are a []string
if len(values) == 0 {
// no more values
break
}
a = append(a, values[i])
i++
}
If you have control over the query string, then use this format:
site.com/?status=1&status=2&status=3&name=John
and get status values using:
r.ParseForm()
a := r.Form["status"] // a is []string{"1", "2", "3"}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论