&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)
。