这样理解是正确的么?该怎么理解?

Aruforce · · 781 次点击
原来是编译器在编译阶段自己做了一些修改操作; var p1 *Person,p1.SetAge2()在编译时会修改成*p1.Clone().SetAge2();//应该是有Clone这一步操作的。 var p2 Person,p2.SetAge()在编译时会修改成&p2.SetAge(); 这不是瞎搞么?在编译后可执行文件和源代码的定义都不一致了;
#5
更多评论
理解大概是对的, SetId()不会和(person *Person) SetId()冲突, go会自动为类型推导其指针,非指针方法,
#1
并不是这一段有疑问; 有疑问的地方在:SetAge和SetAge2 按照方法的定义,SetAge 压栈时一部压入 *Person类型,而SetAge2 压栈时必须压入Person类型, 在上面代码person2.SetAge(11)和person3.SetAge2(11)编译或者运行时应该报错,我认为应该报错的原因正如注释缩写; 然而结果却没有,然后就可是迷惑了.
#2