![]() |
1
1012
一行回答:
说明:
如果“foo”确实存在于地图中,则
|
![]() |
2
91
编辑: 以下答案在Go 1之前。从Go 1开始,它不再准确/有效。 除了 The Go Programming Language Specification ,你应该读 Effective Go . 在上一节 maps 他们说: 试图用映射中不存在的键获取映射值将导致程序崩溃,但有一种方法可以安全地使用多重分配。
“为了测试在地图中的存在而不担心实际值,可以使用空白标识符,一个简单的下划线)。空白标识符可以被分配或声明为任何类型的值,而该值被无害地丢弃。若要测试在地图中的存在,请使用空白标识符代替该值的普通变量。
|
![]() |
3
41
搜查 go-nuts email list 并在2009年11月15日找到了彼得·弗罗赫利奇发布的解决方案。
或者,更紧凑地说,
注意,使用
|
![]() |
4
18
简短回答
例子这里有一个 example at the Go Playground . 更长的答案每个 Maps 截面 Effective Go :
|
![]() |
5
9
如其他答案所述,一般的解决方案是使用 index expression 在一个 assignment 特殊形式:
这个又漂亮又干净。但是它有一些限制:它必须是一个特殊形式的分配。右侧表达式只能是映射索引表达式,左侧表达式列表必须正好包含两个操作数,第一个操作数是值类型可赋值的,第二个操作数是
重要的是要知道,如果索引映射值是
试一试 Go Playground . 所以如果我们知道在我们的地图中不使用零值,我们可以利用这个。
例如,如果值类型为
输出(在 Go Playground ):
在实践中,有很多情况下,我们不在地图中存储零值,所以这可以经常使用。例如,接口和函数类型的值为零
使用这种“技术”还有另一个优点:您可以用一种简洁的方式检查多个键的存在(您不能用特殊的“逗号确定”形式来检查)。有关此的详细信息: Check if key exists in multiple maps in one condition |
![]() |
6
6
更好的方法
|
![]() |
7
4
下面提到 "Index expressions" .
|
![]() |
8
3
然后,去运行地图。 是否存在字符串?真 不存在?假 |
![]() |
9
1
为此,可以使用双值分配。请检查下面的示例程序
|
![]() |
10
-14
只使用
|