以下代码是否能编译通过?
package main
import "fmt"
func main() {
m := make(map[string]int)
fmt.Println(&m["qcrao"])
}
答:不能,编译报错
.\main.go:8:15: invalid operation: cannot take address of m[“qcrao”] (map index expression of type int)
解析: 这个问题,相当于问:可以对 map 的元素直接取地址吗?
知识点:无法直接对 map 的 key 或 value 进行取址。如果通过其他 hack 的方式,例如 unsafe.Pointer 等获取到了 key 或 value 的地址,也不能长期持有,因为一旦发生扩容,key 和 value 的位置就会改变,之前保存的地址也就失效了。