根据语言规范:
x.m()如果方法集(的类型)x包含m并且参数列表可以分配给的参数列表,则该方法调用有效m。如果x是可寻址且&x方法集包含m,x.m()则为(&x).m()
在您的示例中,的方法集中没有
Change方法
(*structInstance),但是它是可寻址的,并且该方法存在于
&(*structInstance)的方法集中,因此该调用被解释为
(&(*structInstance)).Change(456)或更简单
structInstance.Change(456)。
防止此行为的唯一方法是还要在
Change上定义方法
someStruct,也许会使它感到恐慌。但是,这不是理想的,因为它只会在运行时告诉您有关问题的信息。构造您的程序将不会造成混乱,因此使用此速记实际上并不重要。



