
正文
go语言的重载实现 go语言chan
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
为什么Go语言不支持重载?
上图是Golang官网FAQgo语言的重载实现的部分截图go语言的重载实现,看来关于Go不支持重载go语言的重载实现的这个问题困扰了很多从面向对象语言转到Go的开发者。官方在这里做出了解答。
在上面的回答中有这样一句话go语言的重载实现:
其意思是go语言的重载实现: 使用其他语言的经验告诉我们,使用具有相同名称但签名不同的多种方法有时会很有用,但在实践中也可能会造成混淆和脆弱。
接下来又说: 在Go的类型系统中,仅按名称进行匹配并要求类型一致是一个简化的主要决定。
最后一句话: 关于操作员重载,似乎比绝对要求更方便。 同样,没有它,事情会变得更简单。
整个的解答非常漂亮、简洁。我们看完之后就会理解,Go语言的设计者之所以没有在Go中实现方法的重载,并没有复杂的理由,核心原则就是: 让Go保持足够的简单。 这也能看出来Go语言的设计者有着极大的选择和克制。
其实,笔者认为重载在本质上并没有很大的实际意义。只是表现力和表现形式上有一定的差别。明确某个上下文中的函数调用的关键就是函数签名,支持重载的语言中一般是函数名加函数参数构成函数签名。而Go中可以认为函数名就是签名。逻辑上没有太大的区别,就是把工作做在了台前 还是幕后的区别。
当然如果非要较真的话,我们或许可以在Go中声明方法的时候将参数写成 interface{} 或者 ... 切片的方式。在传进来参数的时候做一步校验,判断参数的类型和个数,然后分别处理之。
仁者见仁智者见智,大家有什么不同的理解欢迎一起沟通。
相关问答
Q1: golang重载什么时候支持
根据相关游戏信息广告显示,受相关制度影响,目前该系统尚在测试阶段,预计于7月15日正式上线支持。
Q2: go语言的参数怎么实现const修饰的效果'
const修饰的数据类型是指常类型go语言的重载实现,常类型的变量或对象的值是不能被更新的。const关键字的作用主要有以下几点:(1)可以定义const常量go语言的重载实现,具有不可变性。例如:constintMax=100;intArray[Max];(2)便于进行类型检查go语言的重载实现,使编译器对处理内容有go语言的重载实现了解go语言的重载实现,消除了一些隐患。例如:voidf(constinti){}编译器就会知道i是一个常量,不允许修改;(3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。(4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面的例子,如果在函数体内修改了i,编译器就会报错;例如:voidf(constinti){i=10;//error!}(5)为函数重载提供了一个参考。classA{voidf(inti){}//一个函数voidf(inti)const{}//上一个函数的重载};(6)可以节省空间,避免不必要的内存分配。例如:#definePI3.14159//常量宏constdoulbePi=3.14159;//此时并未将Pi放入ROM中doublei=Pi;//此时为Pi分配内存,以后不再分配!doubleI=PI;//编译期间进行宏替换,分配内存doublej=Pi;//没有内存分配doubleJ=PI;//再进行宏替换,又一次分配内存!const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。(7)提高了效率。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
Q3: go语言和java比是什么?
区别:
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虚拟机)上运行。它是当今最着名和最着名的编程语言之一。
Q4: 为什么Golang(Go语言)不支持重载
从语法讲,重载是扩展了函数(或方法)签名,从只认名字变为名字+参数类型,所以题主这个例子只要把不同参数的foo函数改成不同名字就好,比如foo1,foo2……
这个不支持按官方说法,是为了保持语法简单,以及避免工程中遇到一些问题,比如参数隐式转换等等
而支持重载的语言也有它们的道理,有时候,函数或方法名字不是程序员自己能控制的,比如说,如果java不支持重载,那么只能有一个构造函数,通过不同输入构造对象就比较麻烦,需要弄成静态方法create的方式:
关于go语言的重载实现和go语言chan的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。





