如何将地图中的值与一组已知值进行比较

时间:2015-10-23 12:01:51

标签: go

我有一些代码从URL中提取URL参数并将其放入地图中。我可以成功打印出我想要检查的地图项的值。

values := r.URL.Query()

a := values["a"]

fmt.Println(a)

我注意到打印值时,打印时会用“[]”打印它们。

我想评估每个a,b,c的值,并检查它是否包含在以逗号分隔的字符串中。

allowedA = "value1,value2,value3"

即。类似于:

if(contains(allowedA,a)

含义“如果'a'中的值包含在变量'allowedA'中,则返回true。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

  

我注意到打印出来的值是" []"围绕着他们。

那是因为url.Valuesmap[string][]string,而不是map[string]string。使用url.Values.Get直接访问参数。

  

我想评估每个a,b,c的值,并检查它是否包含在以逗号分隔的字符串中。

我建议拆分字符串并将结果用作地图键,以便您可以将地图用作一组。即。

allowedAMap := map[string]struct{}{}
allowedAStrs := strings.Split(allowedA, ",")
for _, s := range allowedAStrs {
    allowedAMap[s] = struct{}{}
}
//...
if _, ok := allowedAMap[a]; !ok {
    fmt.Println("wrong a")
    return
}
fmt.Println("correct a")