Go 不允许获取地图成员的地址:
// if I do this:
p := &mm["abc"]
// Syntax Error - cannot take the address of mm["abc"]
基本原理是,如果 Go 允许获取此地址,则当 map backstore 增长或缩小时,该地址可能会变得无效,从而使用户感到困惑。
但是当 Go 切片超出其容量时会重新定位,然而,Go 允许我们获取切片元素的地址:
a := make([]Test, 5)
a[0] = Test{1, "dsfds"}
a[1] = Test{2, "sdfd"}
a[2] = Test{3, "dsf"}
addr1 := reflect.ValueOf(&a[2]).Pointer()
fmt.Println("Address of a[2]: ", addr1)
a = append(a, Test{4, "ssdf"})
addrx := reflect.ValueOf(&a[2]).Pointer()
fmt.Println("Address of a[2] After Append:", addrx)
// Note after append, the first address is invalid
Address of a[2]: 833358258224
Address of a[2] After Append: 833358266416
为什么 Go 是这样设计的?取切片元素的地址有什么特别之处?
慕莱坞森
POPMUISE
相关分类