英文:
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
我认为你试图不给v
和ok
变量赋值?
这是不可能的。然而,有一种简写的方法可用:
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
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论