聊一聊 Golang 方法接收者

网站建设3年前发布
9 0 0

从应用上讲,方法接受者分为值接收者/指针接收者,初级golang学者可能看过这两个接收者实际表现, 但是一直很混淆,很难记忆。
,本次我们使用地址空间的角度来剖析实质,强化记忆。,值接受者:receiver是struct等值类型。,下面定义了值类型接受者 Person, 尝试使用 Person{}, &Person{}去调用接受者函数。,尝试改变p1=Person{},p2=&Person{}的字段值:,p1=Person{} 未能修改原p1的字段值;p2=&Person{}也未能修改原p2的字段值。,带来的效果是:对值类型接收者内的字段操作,并不影响原调用者。,方法接收者也可以定义在指针上,任何尝试对指针接收者的修改,会体现到调用者。,尝试改变p1= Person{}, p2=&Person{}字段值,p1=Person{} 成功修改字段值,p2=&Person{}也成功修改字段值。,带来的效果:任何对指针接收者的修改会体现到 原调用者。,接上例子:,依旧是 值类型/指针类型方法接收者的效果:,这种姿势相对于面向对象的接收者不常见。

© 版权声明

相关文章