从事开发已经15年了,主要从事java语言开发,已有10余年,期间搞过一段时间python、PHP、ASP、C#、NodeJS,也说不出哪种语言孰好孰坏吧,没有最好的语言,只有最合适的语言。
最近因项目的需要,学习GO语言,准备用GO语言开发,由于JAVA语言已根深蒂固,在接触新的语言时,难免心里会做一番比较,我这里说一下GO语言中的一些奇葩的设定或者使用不舒服的地方:
(1)、在JAVA里,一切皆接口,习惯了接口的灵活和可扩展,我接触GO语言后,GO语言的函数是一等公民,接口属于鸭子类型,不过还是喜欢从接口开始编程。
(2)、GO语言的可见性分包内可见和包外可见两个粒度,如果变量/函数第一个字符是大写,则包内包外可见,佩服设计人奇葩的脑洞,用起来非常难受,如果变量是包内可见,我要改成包外可见,要把这个变量全部该一遍。
(3)、GO语言异常处理机制有两种,一种是使用panic/recover,一种是通过函数可返回多个值的特性返回,官方推荐使用第二种,但是第二种充斥着各种err的处理和返回,代码量成倍增加,对比之下,更喜欢java的try/catch或者直接抛出异常
(4)、GO包处理机制,同一个目录下包名是相同的,感觉粒度太大了,举个例子,utils目录下有两个工具类NumberUtils、DateUtils,都有同一个方法ToStr,由于同属于utils包名下,是不能实现两个同名方法的,没办法,只能在utils目录下,分别创建strings、date两个目录,或者把方法改成NumberToStr和DateToStr。
(5)、GO语言不支持注解,没有切面编程,感觉不太方便,也不简洁,例如要为已完成的业务模块添加日志记录功能,只能把日志记录的代码,协程一个通用的接口,加到每一个方法里面去。
(6)、GO语言从语言级别支持协程编程,这也是GO语言比其他语言强大的之处,但是不支持停止,很不友好,如果要停止协程,一般采用通道、context触发事件来停止协程,停止过程也有点麻烦;如果是处理阻塞事务的协程,例如连接网络、打印机等等,只能设定超时机制实现了。
页面更新:2024-03-06
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号