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

Python017

为什么Go语言不支持重载?,第1张

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

在上面的回答中有这样一句话:

其意思是: 使用其他语言的经验告诉我们,使用具有相同名称但签名不同的多种方法有时会很有用,但在实践中也可能会造成混淆和脆弱。

接下来又说: 在Go的类型系统中,仅按名称进行匹配并要求类型一致是一个简化的主要决定。

最后一句话: 关于操作员重载,似乎比绝对要求更方便。 同样,没有它,事情会变得更简单。

整个的解答非常漂亮、简洁。我们看完之后就会理解,Go语言的设计者之所以没有在Go中实现方法的重载,并没有复杂的理由,核心原则就是: 让Go保持足够的简单。 这也能看出来Go语言的设计者有着极大的选择和克制。

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

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

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

区别:

1、Go不允许函数重载,必须具有方法和函数的唯一名称;java允许函数重载。

2、Java默认允许多态,Go没有。

3、Go代码可以自动扩展到多个核心;而Java并不总是具有足够的可扩展性。

4、Java不支持多继承,Go支持多继承。

什么是go语言?

Go也称为Golang,是一种编程语言。作为一种开源编程语言,Go可以轻松构建可靠,简单和高效的软件。

Go是键入的静态编译语言。Go语言提供垃圾收集,CSP风格的并发性,内存安全性和结构类型。

什么是java?

Java是一种用于一般用途的计算机编程语言,它是基于类的,并发的和面向对象的。Java专门设计为包含很少的实现依赖项。Java应用程序在JVM(Java虚拟机)上运行。它是当今最着名和最着名的编程语言之一。

Go语言自亮相以来并没有展示一个明确的方向,Google员工将Go语言称为一个“试验性语言”,称其试图融合Python等动态语言的开发速度和C或C++等编译语言的性能和安全。一位Go语言的支持者概括而言Go语言如下:简单、快速、安全、并发、快乐编程、开源;但Go语言缺乏方向以及其“集大成者”的尝试很容易会导致其学猫不成学狗也不成,沦为四不像。尽管如此,编者仍然觉得Go语言有相当大的潜力:很多开发者对它感兴趣——不仅它的最初设计者阵容强大,而且在参与修改源代码的人群中也不乏大牛级人物。这很有可能帮助Go语言找到适合自己的方向,开拓系统编程的新方向。