&a.b等价于&(a.b),而不是(&a).b,即&a.b是取a.b的地址。
结论:运算符优先级. > &。
示例程序:
type ASD struct {
Name string
}
func main() {
asd := ASD{
"111",
}
name := &asd.Name
fmt.Printf("%#v\n", name)
fmt.Println("*name:", *name)
asd.Name = "222"
fmt.Println("*name:", *name)
}
运行结果:
(*string)(0xc000010250)
*name: 111
*name: 222
结论:
可以看到name变量是指针变量*strnig,所以&asd.Name是取asd.Name的地址,即等价于&(asd.Name)。