Go语言的独特魅力

 go教练   2019-08-07 16:54   178 人阅读  0 条评论

谷歌前员工Jake Wilson认为,比起大家熟悉的 Python,Go语言其实有很多优良特性,很多时候都可以代替Python,他已经在很多任务中使用Go语言替代了Python。那么Go语言到底有着什么样的独特魅力?它有哪些胜于Python的地方呢?让我们一起来了解一下吧!

2019年程序员最想学习的编程语言

 微信截图_20190807104956.png

出身名门的Go语言

对于一门只有十年历史的新语言,Go的发展势头相当迅猛,容器界的扛把子Docker就是用Go写的,国内也有不少团队广泛使用Go。近日,HackerRank在社区发起了程序员技能调查,来自100多个国家、超过 70000名开发者参与其中。调查结果显示,2019年,程序员最想学习的编程语言Top 3分别是Go、Kotlin和Python,其中Go以37.2%的比例排在首位。

Go要想撼动编程界的常青树Java二十多年的地位无疑难度颇大。据HackerRank数据显示,2018年,Java在开发者最受欢迎的编程语言排行榜中仍然排名第2,Python排名第4,Go排名第13,距离第一名JavaScript还有不小的差距。

但对本文作者Jack Wilson来说,Go语言虽然“年纪尚小”,但已经拥有很多非常优秀的特性。

 微信截图_20190807105023.png

Go语言到底好在哪?

在很多任务上,我已经用Go语言代替了Python,举几个例子:

处理储存在S3上的云端日志

S3上的bucket和/或region之间移动TB级别大小的文件

匹配本地的数据库记录和S3上的文件,以保证文件处于同步状态

这些任务大多是一次性的,所以使用脚本语言操作就会比较合适。这些任务需要快速地编程,而代码用过一次一般就舍弃了。一般来说,这种任务的需求都比较新颖、比较专,其代码很少需要复用。下面就来介绍一下,针对这种任务为什么可以用Go语言来替代Python。

拥有编译器很方便

我经常在写Python时犯很低级的错误。我会给变量或函数命错名,或向它们传递错误的参数。这样的错误用调试工具可以找出一部分,但这种工具一般需要专门设置。我从来没很方便地配置过pylint,而且我也不喜欢用那些很重的、配置起来更麻烦的IDE。最惨的情况是,你可能会不小心打错变量名,而这种错误又不太容易发现。你的脚本可能会跑好几个小时才遇上这个错误,然后一切都崩溃了,你又得从头开始跑这个脚本。这种错误大部分都可以靠 单元测试 检出,但单元测试很少能覆盖100%的代码,而且我并不想浪费时间去给一个只用一次的脚本写单元测试。而带编译器的语言就可以解决以上所有问题。编译器可以检测出你犯的所有低级错误。出于这点原因,我在写长达几百行的代码时,更倾向于使用Go这类语言。

 微信截图_20190806093323.png

开发速度

然而,需要编译的语言的一个缺点是,一般你的开发速度会下降。这点在C/C++和Java等语言上体现得尤其明显。而Go是一个非常简单的语言,我发现它的开发速度并没有被拖慢多少。不要误会,我的意思并不是说它比Python还快,而是想说,用Go语言没有比Python慢很多,一般达到使用Python开发速度的85%还是没问题的。相对于拥有编译器能避免的那些低级错误来说,我认为牺牲15%的开发速度还是很值的。

更好的并行性

你可能已经知道,Go语言就是为并行而生的。在我的团队里经常会需要并行程序,因为我们要在S3上操作我们数据库中大量的数据。如果该任务是IO密集型的(实际上很多任务都是),我们就可以很容易地部署Python线程。但如果任务是CPU密集型的,用Python就比较不方便了,因为有全局解释器锁的存在。我非常享受在Go语言中简单代码不用修改就能直接多线程运行的爽快感。不知你在Python中有没有遇到过这种问题:直接复制粘贴的多线程代码却完全不工作。在Go语言中就不会有此问题。

部署简单

我比较喜欢把所有依赖放在单个二进制文件里。我经常在EC2服务器上运行自己的脚本,好让环境更加接近我们在S3上的服务器。如果用Python的话,我需要保证所有需要的包都在服务器上装好,而且我的同事不能在服务器上装任何可能产生冲突的包。虚拟环境可以解决大部分问题,但我还是觉得用Go语言更方便。我一般是在Mac和Linux上交叉编译我的代码,将其拷贝到远程服务器上,然后就可以任其运行了。我的代码所需要的所有依赖都在一个二进制文件里。

 微信截图_20190515180953.png

风格一致

一开始,Go语言的格式化工具gofmt实在是让我抓狂,尤其是它在代码缩进时要求使用tab键而不是空格键。我觉得这简直是疯了。但是我用了一段时间后,就开始“真香”了。写代码时,我在格式上可以天马行空,格式化工具会帮我完成一切。我的所有代码风格都是一致的,即使我是在写不同的项目。这是因为格式化是标准Go工具的一个特性。但我如果想在Python中实现这一点,就要费些劲儿了。我需要正确地配置pylint工具,并要保证在每一个项目中都使用它。

更便捷的工具

Gofmt只是Go语言众多工具中的一个小例子。所有我喜欢用的编辑器——VSCode,vim和Sublime Text中,都有Go语言相应的扩展,让我能够方便地享受到Go工具的优点。这样,我就能获得写Java时的那种智能体验,却不需要真正使用一个IDE。我在用Python时从未获得过这种体验。

以上就是今天给大家介绍的Go语言的独特魅力,如果你还想了解更多关于go语言的知识技巧,可以持续关注我们http://www.fastgolang.com

本文地址:http://fastgolang.com/132.html
版权声明:本文为原创文章,版权归 go教练 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?