go语言不支持方法重载 go语言没有class

为什么 Go 语言的性能还不如javaGo语言自亮相以来并没有展示一个明确的方向,Google员工将Go语言称为一个“试验性语言”,称其试图融合Python等动态语言的开发速度和C或C++等编译语言的性能和安全 。一位Go语言的支持者概括而言Go语言如下:简单、快速、安全、并发、快乐编程、开源;但Go语言缺乏方向以及其“集大成者”的尝试很容易会导致其学猫不成学狗也不成,沦为四不像 。尽管如此,编者仍然觉得Go语言有相当大的潜力:很多开发者对它感兴趣——不仅它的最初设计者阵容强大 , 而且在参与修改源代码的人群中也不乏大牛级人物 。这很有可能帮助Go语言找到适合自己的方向,开拓系统编程的新方向 。
go语言可以开发hadoop吗go的官方文档中说到 , 不支持重载机制可以简化方法调度 。从其他语言的经验上看 , 重载只是偶尔有用 , 但会在实践中引起误解和导致脆弱性 。
为什么Go语言不支持重载?上图是GolangFAQ的部分截图,看来关于Go不支持重载的这个问题困扰了很多从面向对象语言转到Go的开发者 。官方在这里做出了解答 。
在上面的回答中有这样一句话:
其意思是: 使用其他语言的经验告诉我们,使用具有相同名称但签名不同的多种方法有时会很有用,但在实践中也可能会造成混淆和脆弱 。
接下来又说: 在Go的类型系统中,仅按名称进行匹配并要求类型一致是一个简化的主要决定 。
最后一句话: 关于操作员重载 , 似乎比绝对要求更方便 。同样,没有它,事情会变得更简单 。
整个的解答非常漂亮、简洁 。我们看完之后就会理解,Go语言的设计者之所以没有在Go中实现方法的重载,并没有复杂的理由,核心原则就是: 让Go保持足够的简单 。这也能看出来Go语言的设计者有着极大的选择和克制 。
其实,笔者认为重载在本质上并没有很大的实际意义 。只是表现力和表现形式上有一定的差别 。明确某个上下文中的函数调用的关键就是函数签名,支持重载的语言中一般是函数名加函数参数构成函数签名 。而Go中可以认为函数名就是签名 。逻辑上没有太大的区别,就是把工作做在了台前 还是幕后的区别 。
当然如果非要较真的话,我们或许可以在Go中声明方法的时候将参数写成 interface{}或者...切片的方式 。在传进来参数的时候做一步校验 , 判断参数的类型和个数,然后分别处理之 。
仁者见仁智者见智,大家有什么不同的理解欢迎一起沟通 。
GO语言学习系列八——GO函数(func)的声明与使用 GO是编译性语言 , 所以函数的顺序是无关紧要的,为了方便阅读,建议入口函数 main 写在最前面 , 其余函数按照功能需要进行排列
GO的函数 不支持嵌套,重载和默认参数
GO的函数 支持 无需声明变量,可变长度,多返回值,匿名,闭包等
GO的函数用 func 来声明 , 且左大括号 { 不能另起一行
一个简单的示例go语言不支持方法重载:
输出为:
参数:可以传0个或多个值来供自己用
返回:通过用 return来进行返回
输出为:
上面就是一个典型的多参数传递与多返回值
对例子的说明:
按值传递:是对某个变量进行复制,不能更改原变量的值
引用传递:相当于按指针传递 , 可以同时改变原来的值,并且消耗的内存会更少,只有4或8个字节的消耗
在上例中,返回值 (d int, e int, f int) { 是进行了命名,如果不想命名可以写成 (int,int,int){ ,返回的结果都是一样的 , 但要注意:

推荐阅读