我只是在环游世界中练习51练习。解释声称,该Scale方法在接收到a Vertex而不是指向a的指针时无效Vertex。
Scale
Vertex
然而,当我改变声明v := &Vertex{3, 4},以v := Vertex{3, 4}在main输出唯一的变化是丢失的&标记指针。
v := &Vertex{3, 4}
v := Vertex{3, 4}
main
&
那么Scale,即使变量不是指针,为什么还要更改它收到的变量呢?
它不会“接收”值。Go是强类型的,因此如果在某处指定了指向T的指针,则指向T(*T)的指针是唯一可以作为该类型位置的值出现的选项。
*T
“魔术”在编译器中,可以在某些条件下有效地“重写”您的代码:
x.m()如果方法集(的类型)x包含m并且参数列表可以分配给的参数列表,则该方法调用有效m。如果x是可寻址的,并且&x的方法集包含m,x.m()则表示(&x).m():
x.m()
x
m
(&x).m()
相关:方法集