将”Map item test as an expression”翻译为中文: 将地图项测试作为表达式。

huangapple go评论81阅读模式
英文:

Map item test as an expression

问题

A Tour of Go解释了如何测试一个键是否存在于映射中:

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 }

有没有一种方法可以在不使用赋值和表达式的方式下进行测试,类似于这样:

if m["Answer"] != nil { Do Something if set }
if m["Answer"] == nil { Do Something if not set }

或者

fmt.Println(m["Answer"] == nil)
英文:

A Tour of Go explains how to test that a key is present in the map:

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 }

Is there a way to test it without the assignment, expression way, something similar to this:

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

Or

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

答案1

得分: 3

我认为你试图不给vok变量赋值?

这是不可能的。然而,有一种简写的方法可用:

if v, ok := m["Answer"]; ok {
    // 如果设置了`v`,则执行某些操作
} else {
    // 如果未设置,`v`将是零值
}

如果你不关心值,只关心它是否被设置,可以将v替换为_

if _, ok := m["Answer"]; ok {
    // 如果设置了,则执行某些操作
} else {
    // 如果未设置,则执行某些操作
}
英文:

I think you're trying not to assign to the v and ok variables?

This is not possible. However, there is a short hand available:

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

If you don't care about the value, but only that it's set, replace v with _.

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

答案2

得分: 2

如果你不关心存储的值,可以使用 _ 作为占位符。

例如:

_, ok := m["Answer"]
if !ok {
  // 做一些操作
} else {
  // 做另一些操作
}

或者,你可以简化一下:

if _, ok := m["Answer"]; ok {
  // 做一些操作
} else {
  // 做另一些操作
}
英文:

You can use _ as a placeholder if you don't care to store the value.

eg.

_, ok := m["Answer"]
if !ok {
  // do something
} else {
  // do something else
}

Or, you can condense this a bit:

if _, ok := m["Answer"]; ok {
  // do something
} else {
  // do something else
}

huangapple
  • 本文由 发表于 2017年2月26日 01:33:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/42459306.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定