根据地图上的Golang文档,
如果请求的密钥不存在,我们得到值类型的零值。在这种情况下,值类型为int,因此零值为0:
j := m["root"] // j == 0
所以我试图确定一个结构是否存在一个给定的字符串,我该如何判断呢?我会检查一个带有零值的空结构吗?这里的比较会是什么样的?
type Hello struct{}
structMap := map[string]Hello{}
j := structMap["example"]
if(j==?) {
...
}
答案 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
}