检测地图中的键是否存在struct

时间:2015-05-13 11:40:38

标签: dictionary go

根据地图上的Golang文档,

  

如果请求的密钥不存在,我们得到值类型的零值。在这种情况下,值类型为int,因此零值为0:

j := m["root"] // j == 0

所以我试图确定一个结构是否存在一个给定的字符串,我该如何判断呢?我会检查一个带有零值的空结构吗?这里的比较会是什么样的?

type Hello struct{}
structMap := map[string]Hello{}
j := structMap["example"]
if(j==?) {
 ...
}

1 个答案:

答案 0 :(得分:7)

使用特殊的"逗号,确定"表单是否在地图中找到了密钥。转到Spec: Index Expressions:

  

在特殊表单的赋值或初始化中使用的a类型的地图map[K]V上的索引表达式

v, ok = a[x]
v, ok := a[x]
var v, ok = a[x]
     

产生一个额外的无类型布尔值。如果地图中存在关键字ok,则true的值为x,否则为false

所以在你的代码中:

type Hello struct{}
structMap := map[string]Hello{}
if j, ok := structMap["example"]; !ok {
    // "example" is not in the map
}