谷歌软件工程师:我为什么喜欢用Go语言?
Go语言最近几年逐渐获得越来越多的开发者的喜欢。在Go社区前不久刚刚庆祝Go诞生10周年生日之际,谷歌云软件工程师Benjamin Congdon发表个人博客,表达了自己对Go倍加青睐的一些原因。
- 作者:大明来源:新智元|2019-11-18 09:56
Go语言最近几年逐渐获得越来越多的开发者的喜欢。在Go社区前不久刚刚庆祝Go诞生10周年生日之际,谷歌云软件工程师Benjamin Congdon发表个人博客,表达了自己对Go倍加青睐的一些原因。他表示,“简洁”是他喜欢使用Go语言最重要的原因。
以下是博客内容:
我使用Go已经好几年了,我最欣赏Go的一点就是它的简洁性。我在几个月前开始在工作中使用Go写代码,发现它真的很容易实现迭代,比Python和Java更为复杂的迭代。
当Go社区庆祝10岁生日时,我一直在想,是什么使Go变得如此与众不同。我认为Go的许多真正力量来自其设计师的理念:高度强调前向兼容性,该语言没有损害可读性的特性,并且随手可得。它提供了用户真正需要的一切(基本测试库,可靠的联网、同步原语以及模板等)。
前向兼容性有多高、版本依赖性就有多低
我认为,和其它语言相比,Go具有最完善的版本控制和依赖关系。我没有因为Go的版本更新遇到任何损失。这一点很重要。在差不多的时间段内,由于Rust的API更改,臭名昭著的Python 2到3过渡,我的项目一度陷入了中断。坦率地说,我觉得npm升级后的任何旧JS项目能不能延续都不好说。
借助Go,我注意到Go的库趋于稳定。在Python和JavaScript中,如果有3年未更新的库,则表明该库已死。而在Go生态系统中,这个库可能仍然可以使用。在其他社区中被视为停滞或忽视的事物,在Go这里反而是复兴的标志。
在Go中,我需要的依赖项更少,而依赖项本身的依赖项也更少。Go没有将更多的逻辑导出到外部依赖项习惯。Go社区中也更容易接受代码重复。有时这一点可能令人沮丧。有时你可能只想要一个执行某种类型的环境或分析的库。很多时候,你需要自己动手编写,或者从StackOverflow答案中去寻找。不过总的来说,我认为这一点还是利大于弊。更少的依赖项意味着项目闲置几个月之后被迫中断的可能性更低。
不过,现在下结论可能对其他编程语言有点不公平。Rust尚未达到Go所具有的稳定性,这可能是因为Rust还不是一种成熟的语言,但也正朝着逐步成熟方向发展。Python 3本身是向前兼容的,我希望Python核心开发人员能从中学到一些教训。在这方面,我对Javascript已经不抱什么希望了。
Go的依附系统也不是没有问题。尽管GoModules很棒,但社区仍未达到100%的采用率。在使用GoModules之前,将所有内容保存在$ GOPATH下的要求是如此烦人,以至于我推迟了多年才开始使用Go。现在情况已经好转,开始显示出逐步改善的迹象。
就向前兼容性而言,Go保证自Go 1发布以来编写的所有Go代码都可以工作到Go 2,直到将来某个不确定的时刻。这是一个强力的承诺,至少到目前为止,我对这种语言的使用体验还是非常积极的。
一些功能虽然现在不需要,以后可能很想要
在使用Go一段时间后,我开始想要一些Go语言根本不支持的额外功能。嗯,我对C ++模板的排斥程度不亚于任何一个人,但是拥有基本的集合类泛型这个要求也不过分,对吧?
具备“开箱即用”的仅有的两个通用化数据结构是数组(slice)和字典(map)。那是否要编写自己的数据结构呢?要么必须针对特定类型进行设置,要么需要盯着一个全是界面的字段{}。这两种方法都各有所长,但有时候,我希望我可以只导入类型安全的、通用的、双向map。
Go将“不需要”发挥到了极致。“需要”是这里的重点词。你将“不需要”泛型,但几乎可以肯定会需要它们。它在错误处理,功能编程和运算符重载上都是上上之选。
那句“陈词滥调”怎么说来着?有时“少即是多”。除了命名的返回值之外,我想不出Go语言中的任何让用户抓狂的功能了。令人印象深刻的是,Go核心开发人员对在Go中模仿其他语言的开发人员群体表现出了极大了约束。Go 2的未来对我来说真的很令人兴奋,因为我很期待看到已经习惯的“下一代” Go是什么样子。
对于Go令人赞叹的另一点是,它提供了几乎所有你需要的东西。
go test是一个很好的基础测试框架。你无需成为JUnit的领域专家,也无需在单元测试类型之间进行选择。同样,Go的同步功能涵盖了你需要的大多数同步原语,http可以提供可用于生产环境的HTTP服务器和客户端(甚至支持HTTP2),而且编码包中有足够多的工具可以处理json,xml,csv,以及许多其他常见格式的数据。
格式化,格式化,格式化,重要的事情说三遍
最后必须说到gofmt。在格式化方面,我有点挑剔。我并不特别在乎应用哪些规则,但是我非常在乎一致性。Go的内部格式化工具gofmt被社区广泛采用,并提供了足够的一致性,使Go的代码“看起来”很用的惯,而不会看代码看得要抓狂。
就我个人而言,我发现使用gofmt可以轻松阅读开源Go代码。尽管每个项目都有自己的处理方式,但是每个项目都遵循相同的格式约定。从美学上讲,这让人愉悦。
所以,我喜欢Go。曾经有一段时间,我被Python的Zen迷住了,并且对其他语言嗤之以。但现在,我期待Go的美好未来。我可能以后会在Rust流行起来之后,去用Rust赶一波时髦,因为我确实喜欢一些类似于函数式的编程。
但是现在,我非常愿意继续使用Go语言。
【编辑推荐】
点赞 0
- 大家都在看
- 猜你喜欢
编辑推荐
- 24H热文
- 一周话题
- 本月获赞
- 推荐 10 个标星 100 K 的 GitHub 开源项目博士生DIY超级显微镜,直接看到原子!网友:太极客了突发!美国再次瞄准中国超算,飞腾、申威等 7 大实体被列入管制清单CPU比GPU训练神经网络快十几倍,英特尔:别用矩阵运算了我们从2021谷歌I/O大会给的谜题中发现了隐藏信息“口罩厂”霍尼韦尔搞出的量子计算机,刚刚获得Nature认可谈谈为何会出现全球“缺芯”详解三大编译器:gcc、llvm 和 clang
- 将在2021年颠覆业务发展的十种技术详解三大编译器:gcc、llvm 和 clang不爱跳槽的程序员集中在8-17k,揭晓中国开发者的真实现状只要你一句话,马斯克就得留扫把头,项目已开源突发!美国再次瞄准中国超算,飞腾、申威等 7 大实体被列入管制清单5个开源的Java项目快速开发脚手架,项目经验有了真香!微软出Go语言教程了(中文版)什么样的程序员,在35岁以后,依然被公司抢着要?
- 你的Windows10即将终止!各大版本服务终止日期大全将在2021年颠覆业务发展的十种技术真香!微软出Go语言教程了(中文版)详解三大编译器:gcc、llvm 和 clang92年百度程序员被抓,给我们警示什么?GitHub 访问不了?用这个方法轻松解决5个开源的Java项目快速开发脚手架,项目经验有了2021年中国程序员薪资和生活现状调查报告
订阅专栏+更多
-
骨干网与数据中心建设案例
高级网工必会共20章 | 捷哥CCIE384人订阅学习
-
中间件安全防护攻略
4类安全防护共4章 | hack_man137人订阅学习
-
CentOS 8 全新学习术
CentOS 8 正式发布共16章 | UbuntuServer286人订阅学习
视频课程+更多
-
强哥带你精通zabbix监控
讲师:周玉强20386人学习过
-
OCP培训 Oracle 12c/18c/19c OCP认证实战培训
讲师:风哥25500人学习过
-
小白轻松学Redis 4.x NoSQL数据库
讲师:齐毅37881人学习过
专题推荐+更多
- 精选博文
- 论坛热帖
读 书 +更多
Microsoft SQL Server 2005 技术内幕:T-SQL查询
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部构造,包含了非常全面的编程参考。它提供了使用Tra...
-
订阅51CTO邮刊
点击这里查看样刊

51CTO服务号

51CTO官微