结构体类型 T 和 *T的方法集
- 定义在结构体
T
上的方法属于类型*T
的方法集中的一员,反之却不然,
即定义在类型*T
上的方法并不属于类型T
的方法集中的一员 - 为什么定义在类型T上的方法属于类型
*T
的方法集中的一员, 但定义在 类型*T
上的方法却不属于类型 T 的方法集合的一员- 对于一个指针值
p
在编译阶段对它的解引用*p
总是合法的 - 但是对于很多非指针值
v
, 在编译阶段, 取它的地址&v
却并不总是合法的(_ = &"abc"
), 难以将v
自动转换为&v
- 对于一个指针值
- 直接值不能取地址? 为什么有很多 &T{} 这种用法?
pm := &map[string]string{} ps := &[]string{} pst := &struct{}{} pmt := &MyType{}
- &T{} 是为了编程方便, 添加的一个 sugar, 是下面形式的缩写, 而不是临时值不能取地址的一个例外
temp := T{} &temp
- 编译器只会自动对变量取地址, 而不会自动对直接值取地址