课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,我们在学习编程开发语言的时候能够选择的目标也再不断的增加,而今天我们就一起来了解一下,相对于python编程开发语言来说,go语言的优势有哪些。
Go语言到底好在哪?
在很多任务上,我已经用Go语言代替了Python,举几个例子:
处理储存在S3上的云端日志
在S3上的bucket和/或region之间移动TB级别大小的文件
匹配本地的数据库记录和S3上的文件,以保证文件处于同步状态
这些任务大多是一次性的,所以使用脚本语言操作就会比较合适。这些任务需要快速地编程,而代码用过一次一般就舍弃了。一般来说,这种任务的需求都比较新颖、比较专,其代码很少需要复用。
下面就来介绍一下,针对这种任务为什么可以用Go语言来替代Python。
拥有编译器很方便
我经常在写Python时犯很低级的错误。我会给变量或函数命错名,或向它们传递错误的参数。这样的错误用调试工具可以找出一部分,但这种工具一般需要专门设置。我从来没很方便地配置过pylint,而且我也不喜欢用那些很重的、配置起来更麻烦的IDE。
惨的情况是,你可能会不小心打错变量名,而这种错误又不太容易发现。你的脚本可能会跑好几个小时才遇上这个错误,然后一切都崩溃了,你又得从头开始跑这个脚本。
这种错误大部分都可以靠单元测试检出,但单元测试很少能覆盖100%的代码,而且我并不想浪费时间去给一个只用一次的脚本写单元测试。
而带编译器的语言就可以解决以上所有问题。编译器可以检测出你犯的所有低级错误。出于这点原因,我在写长达几百行的代码时,更倾向于使用Go这类语言。
开发速度
然而,需要编译的语言的一个缺点是,一般你的开发速度会下降。这点在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上交叉编译我的代码,将其拷贝到远程服务器上,然后就可以任其运行了。我的代码所需要的所有依赖都在一个二进制文件里。
风格一致
一开始,Go语言的格式化工具gofmt实在是让我抓狂,尤其是它在代码缩进时要求使用tab键而不是空格键。我觉得这简直是疯了。
但是我用了一段时间后,就开始“真香”了。写代码时,我在格式上可以天马行空,格式化工具会帮我完成一切。我的所有代码风格都是一致的,即使我是在写不同的项目。这是因为格式化是标准Go工具的一个特性。
但我如果想在Python中实现这一点,就要费些劲儿了。我需要正确地配置pylint工具,并要保证在每一个项目中都使用它。
更便捷的工具
Gofmt只是Go语言众多工具中的一个小例子。所有我喜欢用的编辑器——VSCode,vim和SublimeText中,都有Go语言相应的扩展,让我能够方便地享受到Go工具的优点。
这样,我就能获得写Java时的那种智能体验,却不需要真正使用一个IDE。我在用Python时从未获得过这种体验。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!