知识卡片

方法用类型而非函数区分同名

专业/工作 · 471.a.3.a

内容

Go 不允许同一个包内出现两个同名函数,但方法可以同名,只要它们分别定义在不同的类型上—— 方法本质就是多了一个”接收器参数”的函数,接收器出现在方法名前的括号里,调用时写成 “值.方法名()“。发散:这其实是[[Go拒绝函数重载选择简单性]] 之后给出的替代方案——不支持按参数类型重载,但允许按”这个方法挂在哪个类型上”来天然消除命名 冲突,命名空间的隔离维度从”参数签名”换成了”所属类型”。

参考来源

- 位置:《Head First Go语言程序设计》第9章《我喜欢的类型:定义类型》(源文件:_epub-src/index_split_001.html) - 结论依据:原文在该章节围绕“Go不允许同一个包内出现两个同名函数,但方法可以同名,只要它们分别定义在不同的类型上——方法本质就是多了一个"…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:tersToGallons。但是这些名字很难写,并且 我们准备增加其他类型的转换时,情况开始变得不能忍受。 有问必答 问:我见过其他语言的重载,它们允许存在多个同名函数,只要它 们的参数不同。Go是否支持? 答:Go语言维护者经常会被问到这个问题,答案 在 https://golang.org/doc/faq#overloading, “…