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 集合的键值获取进行了特殊处理? 如果是有什么情况也使用了类似的特殊处理
index expression
从文档里搜索一下 special form,可以发现还有 type assertion ,receive expression 也有类似的形式。
这个 special form 的含义跟行为在三个地方都有点不太相同。
type assertion 里面,使用这种形式将不引起 panic ,而是通过一个 boolean 返回转换是否成功。
receive expression 里,特殊形式的 boolean 指示通信是否成功(为 false 表示 channel 已经关闭了)。