知识卡片

方法集因接收者类型而不同

专业/工作 · 473.a.1.a

内容

一个类型的”方法集”指它的值能调用的所有方法。指针类型*T的方法集包含所有以T*T为接收者定义的方法;而值类型T的方法集只包含以T为接收者定义的方法,不包含以*T为接收者的方法。发散:这条规则解释了一个常见的编译错误——把值类型(而非指针)传给要求某接口的函数时报”未实现接口”,根源往往就是该类型的某个方法用了指针接收者,值类型的方法集天然缺了这一块。

参考来源

- 位置:《Go语言程序设计》第6章《面向对象编程》(源文件:_epub-src/OEBPS/text00040.html) - 结论依据:原文在该章节围绕“一个类型的"方法集"指它的值能调用的所有方法”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:type Tasks struct { slice []string // 具名字段(聚合) Count // 匿名字段(嵌入) } func (tasks *Tasks) Add(task string) { task.slice = append (tasks.slice, task) task.Increment() // 就像写t…