GO语言学习有感,不建议学习

从事开发已经15年了,主要从事java语言开发,已有10余年,期间搞过一段时间python、PHP、ASP、C#、NodeJS,也说不出哪种语言孰好孰坏吧,没有最好的语言,只有最合适的语言。

最近因项目的需要,学习GO语言,准备用GO语言开发,由于JAVA语言已根深蒂固,在接触新的语言时,难免心里会做一番比较,我这里说一下GO语言中的一些奇葩的设定或者使用不舒服的地方:

(1)、在JAVA里,一切皆接口,习惯了接口的灵活和可扩展,我接触GO语言后,GO语言的函数是一等公民,接口属于鸭子类型,不过还是喜欢从接口开始编程。

GO接口实现

(2)、GO语言的可见性分包内可见和包外可见两个粒度,如果变量/函数第一个字符是大写,则包内包外可见,佩服设计人奇葩的脑洞,用起来非常难受,如果变量是包内可见,我要改成包外可见,要把这个变量全部该一遍。

GO 可见度

(3)、GO语言异常处理机制有两种,一种是使用panic/recover,一种是通过函数可返回多个值的特性返回,官方推荐使用第二种,但是第二种充斥着各种err的处理和返回,代码量成倍增加,对比之下,更喜欢java的try/catch或者直接抛出异常

GO使用panic/recover处理异常

GO使用返回error方式处理异常

(4)、GO包处理机制,同一个目录下包名是相同的,感觉粒度太大了,举个例子,utils目录下有两个工具类NumberUtils、DateUtils,都有同一个方法ToStr,由于同属于utils包名下,是不能实现两个同名方法的,没办法,只能在utils目录下,分别创建strings、date两个目录,或者把方法改成NumberToStr和DateToStr。

(5)、GO语言不支持注解,没有切面编程,感觉不太方便,也不简洁,例如要为已完成的业务模块添加日志记录功能,只能把日志记录的代码,协程一个通用的接口,加到每一个方法里面去。

(6)、GO语言从语言级别支持协程编程,这也是GO语言比其他语言强大的之处,但是不支持停止,很不友好,如果要停止协程,一般采用通道、context触发事件来停止协程,停止过程也有点麻烦;如果是处理阻塞事务的协程,例如连接网络、打印机等等,只能设定超时机制实现了。

GO使用context停止协程

展开阅读全文

页面更新:2024-03-06

标签:语言   粒度   奇葩   变量   函数   异常   接口   机制   两个   建议   方法

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top