登录
首页 >  Golang >  Go问答

为什么 Golang 允许具有不同接收者类型的函数具有相同的名称,但不允许具有不同参数类型的函数具有相同的名称?

来源:stackoverflow

时间:2024-02-13 10:00:24 199浏览 收藏

今天golang学习网给大家带来了《为什么 Golang 允许具有不同接收者类型的函数具有相同的名称,但不允许具有不同参数类型的函数具有相同的名称?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

为什么 golang 允许两个函数在接收器类型不同的情况下具有相同的名称,但在参数类型不同的情况下则不允许?例如考虑一下

type A struct{}
type B struct{}

// This is allowed
func (*A) foo(){}
func (*B) foo(){}

// This is not allowed
func foo(*A){}
func foo(*B){} // compilation error: "foo redeclared in this block"

这个选择背后的逻辑是什么?


正确答案


禁止具有相同名称和不同类型的具体类型的方法在 Go FAQ: Why does Go not support overloading of methods and operators?

如果方法分派也不需要进行类型匹配,那么它就会被简化。其他语言的经验告诉我们,使用具有相同名称但不同签名的多种方法有时是有用的,但在实践中也可能会造成混乱和脆弱。仅按名称匹配并要求类型一致是 Go 类型系统中的一个重大简化决策。

关于运算符重载,它看起来更像是一种方便,而不是绝对的要求。同样,如果没有它,事情会变得更简单。

允许不同类型具有相同名称的方法(可选地具有相同的参数类型,在同一包中声明)的原因显而易见:将方法绑定到类型自然地为该方法提供了“名称空间”,即它们所属的类型.

如果不允许,则无法在同一个包中声明实现相同接口的多个类型。这需要将它们放入不同的包中。

终于介绍完啦!小伙伴们,这篇关于《为什么 Golang 允许具有不同接收者类型的函数具有相同的名称,但不允许具有不同参数类型的函数具有相同的名称?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>