美文网首页
为什么Go语言不支持重载?

为什么Go语言不支持重载?

作者: Hifun丶 | 来源:发表于2020-01-20 17:09 被阅读0次
Golang官网截图

上图是Golang官网FAQ的部分截图,看来关于Go不支持重载的这个问题困扰了很多从面向对象语言转到Go的开发者。官方在这里做出了解答。
在上面的回答中有这样一句话:

Experience with other languages told us that having a variety of methods with the same name but different signatures was occasionally useful but that it could also be confusing and fragile in practice.

其意思是:使用其他语言的经验告诉我们,使用具有相同名称但签名不同的多种方法有时会很有用,但在实践中也可能会造成混淆和脆弱。
接下来又说:在Go的类型系统中,仅按名称进行匹配并要求类型一致是一个简化的主要决定。
最后一句话:关于操作员重载,似乎比绝对要求更方便。 同样,没有它,事情会变得更简单。
整个的解答非常漂亮、简洁。我们看完之后就会理解,Go语言的设计者之所以没有在Go中实现方法的重载,并没有复杂的理由,核心原则就是:让Go保持足够的简单。 这也能看出来Go语言的设计者有着极大的选择和克制。

其实,笔者认为重载在本质上并没有很大的实际意义。只是表现力和表现形式上有一定的差别。明确某个上下文中的函数调用的关键就是函数签名,支持重载的语言中一般是函数名加函数参数构成函数签名。而Go中可以认为函数名就是签名。逻辑上没有太大的区别,就是把工作做在了台前 还是幕后的区别。

当然如果非要较真的话,我们或许可以在Go中声明方法的时候将参数写成interface{} 或者 ... 切片的方式。在传进来参数的时候做一步校验,判断参数的类型和个数,然后分别处理之。

仁者见仁智者见智,大家有什么不同的理解欢迎一起沟通。

相关文章

  • 30小时快速精通C++拾遗

    C语言不支持重载,为什么C++支持重载? C语言不支持函数重载,编译时函数名加上_或者其他标识C++为什么能够重载...

  • 为什么Go语言不支持重载?

    上图是Golang官网FAQ的部分截图,看来关于Go不支持重载的这个问题困扰了很多从面向对象语言转到Go的开发者。...

  • golang-面向对象

    思考:go语言不支持继承与多态的优点与缺点是什么 go语言只支持封装,不支持继承与多态 go语言没有class,只...

  • Go语言 异常panic和恢复recover用法

    背景:Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言...

  • panic recover的应用(golang)

    Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计...

  • 关于Golang panic用法详解

    Go语言[https://www.php.cn/be/go/]追求简洁优雅,所以,Go语言不支持传统的 try…c...

  • 异常处理

    异常处理 Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go...

  • Go语言入门第三节 Go 语言面向对象机制

    Go语言面向对象编程 Go语言的面相对象和主流语言有很大的不同,如Go 语言里是不支持继承,Go语言的接口实现也不...

  • 01-函数重载(Overload)

    我们知道,在C语言当中,是不支持函数重载的,但是C++支持函数重载,并且有很多语言都支持函数重载。 例如下列的两个...

  • Go 语言基础——变量常量的定义

    go语言不支持隐式类型转换,别名和原有类型也不能进行隐式类型转换go语言不支持隐式转换 变量 变量声明 声明变量不...

网友评论

      本文标题:为什么Go语言不支持重载?

      本文链接:https://www.haomeiwen.com/subject/grnjzctx.html