Go中的索引表达式是否根据上下文更改其返回类型?

问题描述 投票:0回答:1

如果地图包含带有键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.oks := a[x]字段返回元组或结构?

dictionary go indexing abstract-syntax-tree
1个回答
1
投票

作为语言本身的一部分,它是一种随意的规则。它用于避免类型转换时的恐慌:

t, ok := x.(T)  

或者检查地图中是否确实存在某个键:

v, ok := m[k]

或检查收到的工作:

x, ok := <-ch

只有在语言设计者插入的这些特殊情况下,才能使用自己的功能。有关更多信息,请参阅spec

© www.soinside.com 2019 - 2024. All rights reserved.