不知不觉,我们团队选择go语言已经两年了,从最开始摸着石头过河到现在的驾轻就熟,感慨万千,总结来说:不服就干。
孙悟空不服天庭,所以大闹天空,那我们不服谁呢?可能不服某位年龄不低的老大哥对世界的绝对统治吧,想要翻出点浪花来。
是的,不服那就干!干之前当然得考虑过潜在的风险,最终确定在可控范围之内,同时因为Go的简单,团队转型也非常顺利,大概一周时间,就华丽丽的转型成功。
项目方面,先后做了消息推送、IM即时聊天、API网关、统一监控平台(系统监控、应用监控、全链路跟踪、服务可用性、业务监控等等),一路下来,最大的感受就是‘爽’,其次就是‘风一般的自由’。
Go语言本身并不自由,较为强制的代码规范、泛型的缺失、略啰嗦的错误处理等,但是我们为什么感受到‘风一般的自由’呢?原因就在于Go实在是太他么的简单了: 简单上手、简单开发、简单测试、简单部署、简单维护,基本所有你能想到现代化软件研发过程中备受诟病的复杂性问题,在Go这里,都不存在。
可能有同学要说了,这个世界上不仅仅Go语言简单,比如python,能被科学界和学生普遍接受,也是因为简单啊,而且名气比Go大,生态比Go好,你们为什么不选Python,别急,且听我细细道来。
不知道大家有没有思考过,是什么让我们在用一门工具时能感受到:哇,牛逼,答案可能是:是否拥有简单、强大的生产力。
Go的生产力体现在以下方面:
1.简单的语法
- 新加入的员工很容易就转型为Go程序员,而且一上手就能有不俗的开发效率
- 有过丰富开发经验的同学肯定都很痛恨去维护历史代码吧?各种神奇的magic代码,就算你喊破喉咙也没人能帮你解决这些,还好Go的语法足够简单,你想写出黑魔法代码估计也无能为力,因此Go的三方库代码可读性一般都很好
2.代码规范强制统一
- 原因基本同上
- Go的标准工具链提供了代码格式化
3.部署简单
- 在本地交叉编译为目标平台的可执行文件,无需任何依赖,扔上去就可以运行
- 容器亲和度极高
4.优秀全面的标准库
基本上正常开发需要的所有功能,标准库都支持了,而且简单易用,稳定性和性能俱佳
我们有express、tomcat
go: 我们有标准库我们有强大的fastjson
go: 我们有标准库我们有netty
go: 我们有标准库我们有强大的异步回调和纤程库
go: 我们只需要在任何函数前加一个go关键字即可我们有强大的三方性能分析工具
go: 我们有自带的标准工具链我们有强大的测试框架
go: 我们有自带的标准工具链
5.写Go项目基本不用担心性能问题
- 语言级并发和高执行性能决定了只要你用Go写出了项目,那么性能一般都是不错的(数据库性能和语言性能无关)
- Go强大的标准工具链支持,能让项目的任何一段代码执行过慢、内存占用过高等问题纤毫毕现,我们团队解决过多个棘手的性能问题,在其它语言可能需要花费一两天的功夫,对go来说10分钟足矣
6.良好的生态
- 是的,我承认,go的生态远远比不上java,但是该有的都有,而且三方库质量还都高,作者也普遍较为活跃
- 现代化的框架、平台对go往往都支持的很好,甚至是官方原生大力支持,比如grpc、tensorflow等等
7.极快的编译速度
- 我要编译了,请允许我喝杯咖咖咖咖啡啡啡啡放松下,shit,这就编译完了?咖啡包装还没拆
8.IDE亲和
- go的ide插件都是go语言自己写的,因此跨平台支持的很好,对于ide的亲和度也很高,vscode、idea、vim都能很好的写Go代码
9.软实时级别的GC
- 微妙级别的GC时间,决定了Go可以在部分实时领域大展身手,比如实时证券行情等
- 我们就不必借助于C++、C去实现高性能代码了,大大提升了开发和维护效率
写了,这么多,前面的为什么在一些场景不选python,大家应该也明白了,说到底,还是想追求’风一般的自由‘。
快到尾声了,再简单提下Go适合的应用场景
- Web服务
- 中间件基础服务
- DevOps服务
- 云计算
- 游戏、直播等实时性要求较高的领域
- 跨平台可执行脚本
最后,再送大家一些福利,自从用了Go,团队加班显著减少,终于有时间陪伴女朋友了,想怎么happy就怎么happy。
我们都是平凡的,也都渴望着成功。一路千辛万苦,跨过山和大海,想要逆袭,可是你敢像孙大圣那样放弃所有吗?
不服就干。
如果您喜欢这篇文章,请点击喜欢;如果想及时获得最新的咨询,请点击关注。您的支持是对作者都是最大的激励,万分感激!By 孙飞