只有在使用值类型调用指针类型方法时, 编译会报错, 其他情况都 OK....他们有什么区别么?
t := Test{}
t.print()
我十分确定, t变量不是指针, 但他就可以调用呀. 查了查发现, 是GO在编译的时候帮我们隐式的做了取址的操作...., 值类型没有绑定print方法, 所以改成传递指针就可以了.而且, 在这里, 如果在 ReceiveTest方法中做取址的操作, 也么的用, 只能在向方法传参的时候做取值操作....那也就意味着, 如果传的是一个较大的对象, 进行值的传递, 会将整个对象全拷贝一份, 然后传递过去, 而传递指针只需要拷贝8字节的指针数据就可以了,
不过如果传入了指针类型, 就要直面在方法内部可能会对对象进行修改的风险....
----
至此, 最开始的疑问已经解答了, 被GO这个t.print(), 调用方法时的隐式转址蒙蔽了我的双眼...