关于go:将项目测试作为表达式


Map item test as an expression

本问题已经有最佳答案,请猛点这里访问。

Go教程介绍如何测试地图中是否存在密钥:

1
2
3
4
5
m := make(map[string]int)
m["Answer"] = 42
v, ok := m["Answer"]
if ok { Do Something if set }
if !ok { Do Something if not set }

有没有一种方法可以不用赋值、表达式或类似的东西来测试它:

1
2
if m["Answer"] IS NOT NULL  { Do Something if set }
if m["Answer"] IS NULL  { Do Something if not set }

1
fmt.Println(m["Answer"] == nil)


如果不想存储值,可以使用_作为占位符。

如。

1
2
3
4
5
6
_, ok := m["Answer"]
if !ok {
  // do something
} else {
  // do something else
}

或者,您可以将其压缩一点:

1
2
3
4
5
if _, ok := m["Answer"]; ok {
  // do something
} else {
  // do something else
}

我认为您试图不分配给vok变量?

这是不可能的。但是,有一个短的手可用:

1
2
3
4
5
if v, ok := m["Answer"]; ok {
    // Do something with `v` if set
} else {
    // Do something if not set, v will be the nil value
}

如果您不关心值,但只关心它的设置,那么用_替换v

1
2
3
4
5
if _, ok := m["Answer"]; ok {
    // Do something if set
} else {
    // Do something if not set
}