go 是不是对 map 集合的键值获取进行了特殊处理?
type Person struct {
name string
}
person := Person{
name: "chang",
}
map1 := make(map[Person]int)
map1[person] = 4
name, ok := map1[person] // 可以
name := map1[person] // 可以
name, ok := 1 // 编译错误
name := 1, 2 // 编译错误
如果按照单纯的赋值来看,要求变量数量和值的数量要一样,但是在 map 取键值时可以不一样,有点像 for range 循环中可以忽略其中的值。
go 是不是也对 map 集合的键值获取进行了特殊处理? 如果是有什么情况也使用了类似的特殊处理
回复
1个回答
test
2024-06-23
An index expression on a map a of type map[K]V used in an assignment statement or initialization of the special form
v, ok = a[x] v, ok := a[x] var v, ok = a[x]
yields an additional untyped boolean value. The value of ok is true if the key x is present in the map, and false otherwise.
从文档里搜索一下 special form,可以发现还有 type assertion ,receive expression 也有类似的形式。
这个 special form 的含义跟行为在三个地方都有点不太相同。
type assertion 里面,使用这种形式将不引起 panic ,而是通过一个 boolean 返回转换是否成功。
receive expression 里,特殊形式的 boolean 指示通信是否成功(为 false 表示 channel 已经关闭了)。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容