go语言大神讲述 go语言教程( 七 )


说到底, 这个是因为对泛型支持的不完备导致的.
Go语言是没啥NB的特性, 但是Go的特性和工具组合在一起就是好用.
这就是Go语言NB的地方.
1.11 没有泛型支持,常见数据类型接口丑陋
没有泛型的话,List、Set、Tree这些常见的基础性数据类型的接口就只能很丑陋:放进去的对象是一个具体的类型,取出来之后成了无类型的interface{}(可以视为所有类型的基础类型),还得强制类型转换之后才能继续使用,令人无语 。Go语言缺少min、max这类函数,求数值绝对值的函数abs只接收/返回双精度小数类型,排序接口只能借助sort.Interface无奈的回避了被比较对象的类型 , 等等等等,都是没有泛型导致的结果 。没有泛型,接口很难优雅起来 。Go开发者没有明确拒绝泛型,只是说还没有找到很好的方法实现泛型(能不能学学已经开源的语言呀) 。现实是,Go 1.0已经定型,泛型还没有,那些丑陋的接口为了保持向后兼容必须长期存在着 。
Go有自己的哲学, 如果能有和目前哲学不冲突的泛型实现, 他们是不会反对的.
如果只是简单学学(或者叫抄袭)已经开源的语言的语法, 那是C++的设计风格(或者说C++从来都是这样设计的, 有什么特性就抄什么), 导致了各种脑裂的编程风格.
编译时泛型和运行时泛型可能是无法完全兼容的, 看这个例子:
type AdderT interface {
Add(a, b T) T
}
这样的数据结构要怎么设计go语言的struct?一般送得及时go语言大神讲述的我都会给好评go语言大神讲述,迟到点的说一句不好意思什么的,我也会说一声没事,然后再给好评,只要不是服务态度问题 , 能说服我接受问题的理由的都能给好评 。不过这个看人吧,遇到暴躁点的客户无论说什么也不接受的我也没法子 。
go语言中函数定义让我搞蒙了从语法讲,重载是扩展了函数(或方法)签名,从只认名字变为名字+参数类型,所以题主这个例子只要把不同参数的foo函数改成不同名字就好,比如foo1,foo2……
这个不支持按官方说法,是为了保持语法简单,以及避免工程中遇到一些问题,比如参数隐式转换等等
而支持重载的语言也有它们的道理,有时候,函数或方法名字不是程序员自己能控制的,比如说,如果java不支持重载,那么只能有一个构造函数 , 通过不同输入构造对象就比较麻烦,需要弄成静态方法create的方式:
go语言中channel的问题第一个问题,打开文件应添加"|os.O_WRONLY"
file, err := os.OpenFile("data.dat",os.O_CREATE|os.O_APPEND|os.O_WRONLY,0777)
第二个问题 , 将Count方法中的 "ch-i"放到方法的最后一行就可以了 。
因为一旦“ch-i"执行了,main方法中的 "-ch"就会执行通过当所有的"-ch"执行完后程序就结束了 。但这时Count的线程方法还来不及执行完(打开文件的速度相对较慢) , 所以仅仅执行一次文件操作就结束了
go语言大神讲述的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于go语言教程、go语言大神讲述的信息别忘了在本站进行查找喔 。

推荐阅读