如果地图包含带有键x的条目,则[x]是具有键x的地图元素,而[x]的类型是M的元素类型
但
在特殊形式的赋值或初始化中使用的类型map [K] V的映射a上的索引表达式
v, ok := a[x]
产生一个额外的无类型布尔值。
我还在学习Go。它是一种“语法特征”,它被融入一种语言并且“只在使用这种语法时才起作用”,即对v := a[x]
和v, ok := a[x]
的调用在AST中表示为不同类型的节点,如MapGetAndCheckExistsNode(m, k, v, ok)
vs MapGet(m, k, v)
?或者这是使用“普通”Go语法实现的,索引函数在某种程度上意识到它的输出是否稍后被“解构”?是否可以使用s.v
语法强制索引表达式使用s.ok
和s := a[x]
字段返回元组或结构?
作为语言本身的一部分,它是一种随意的规则。它用于避免类型转换时的恐慌:
t, ok := x.(T)
或者检查地图中是否确实存在某个键:
v, ok := m[k]
或检查收到的工作:
x, ok := <-ch
只有在语言设计者插入的这些特殊情况下,才能使用自己的功能。有关更多信息,请参阅spec。