知识卡片
指针接收器才能修改原值
内容
接收器参数除了多一个”绑定类型”的身份外,本质上和普通参数一样遵循[[值传递意味着函数只改副本]]: 用值类型做接收器,方法内部拿到的是接收器的一份拷贝,对它的任何修改都不会反映到调用者手里的 原值上;要让方法真正改动原值,必须把接收器声明成指针类型,并在方法内通过指针去更新。发散:这也解释了为什么同一类型的所有方法通常要么全用 值接收器、要么全用指针接收器,混用会让”这个类型到底会不会被就地修。
参考来源
- 位置:《Head First Go语言程序设计》第9章《我喜欢的类型:定义类型》(源文件:_epub-src/index_split_001.html)
- 结论依据:原文在该章节围绕“接收器参数除了多一个"绑定类型"的身份外,本质上和普通参数一样遵循[[值传递意味着函数只改副本]]:用值类型做…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:ar方法,Year字段仍然被设置 为了零值! setter方法需要指针接收器 记得我们之前展示的Number类型上的Double方法吗?最初,使用 了一个普通的值接收器类型Number。但是我们知道,像其他参数一 样,接收器参数接受了一个原值的拷贝。Double方法只是更新了拷贝, 在方法退出的时候更新就丢失了。 我们需要更新Double…