76

Golang与Python,哪种编程语言更适合您?

 5 years ago
source link: http://developer.51cto.com/art/201902/592279.htm?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【51CTO.com快译】在开始任何项目之前,大多数开发团队都会通过几轮会议,来决定他们将对软件使用何种最佳编程语言。而在多数时候,此类讨论最后会归结于是使用Python、还是Golang语言。在本文中,我将比较这两种语言的如下各个方面,这些方面的参数将能够帮助您判定出哪一种语言更适合您的手头项目。

  • 性能
  • 可扩展性
  • 实际应用
  • 执行方式
  • 程序库
  • 代码可读性

在开始比较Golang与Python之前,让我们先简单介绍一下这两种语言的特点。

什么是Golang?

F3MBNzB.jpg!web

Golang ,也称为Go,是由Google公司开发的一种计算机编程语言。Google在2007年就开发了该语言,并于2009年向公众推出。其三位主要开发人员分别是Robert Griesemer、Rob Pike和Ken Thompson。他们的目标是创建一种新的语言,既能够松散地基于C语言语法,又能够消除由C++等语言所产生的“额外垃圾(extraneous garbage)”。因此,Go被赋予了其他现代语言的许多功能,例如:方法和运算符的重载,指针算法,以及类型继承。如今,该语言已经发展成为了一种静态类型的语言,它既有精致且强大的资源库,又有无与伦比的性能与速度。

Go语言介绍到此,现在让我们来看看Python。

什么是Python?

2eiaUzM.png!web

Python 是一种通用的编程语言,能够实现几乎任何一种项目需求。它由荷兰程序员Guido van Rossum所创建,并于1991年首次发布。Python最主要的特点在于它是一种解释型语言。也就是说,那些编写好的代码实际上并没有在运行时,被转换为计算机可读的格式。而大多数编程语言在编译程序时都需要执行此类转换。由于它最初被用于一些琐碎性的项目,因此这种语言也被称为“脚本语言”。

至此,我们已对这两种语言进行了粗略的介绍,下面让我们来对它们进行各个方面的比较。

性能

首先,我们从解决复杂数学函数的角度,来比较这两种语言对于内存的使用程度,以及解决问题所花费的时间。

如下图所示,我们使用它们分别来处理三个不同类型的问题,即:Mandelbrot等式、n body问题和fasta格式。这些都是非常复杂的问题,它们不但需要大量的计算,而且可以作为测试相关语言性能与内存管理的完美方案。下面便是Golang和Python在耗时与内存单元使用量方面的数据。

FfQfAz6.png!web

我们可以清楚地看到,Golang在性能方面胜过了Python。

下面我们继续从可扩展性的角度来进行比较。

可扩展性

如今,构建真正可扩展的应用程序可谓是一项技术活。如果您的软件应用无法按需扩展的话,则可能会对业务产生一些不利的影响。由于Golang是由Google所开发,旨在帮助其成千上万的开发程序员,解决部署在数千个集群上,大型托管服务器软件的扩展性问题,因此Golang内置了对并发进程通道(如并发性)的支持。相对而言,Python在并发性方面的支持则比较费劲,它只能通过多个线程来实现并行性。

下面让我们来理解一下并发性(concurrency)和并行性(parallelism)之间的区别。

并发性和并行性

并发性意味着:应用程序同时在多个任务上同时(并发地)运作。因此,如果某台计算机只有一颗CPU,那么其应用程序可能无法在同一时间、在多个任务上“推进工作”。不过,应用程序在内部,则可以一次性处理多个任务。而且,在下一个任务开始之前,它并不需要全部完成当前的任务。

V36zmuU.png!web

并行性意味着:应用程序将其任务分割成较小的多个子任务,这些子任务可以被并行处理,例如:在同一时间点上,程序可以分配给多个CPU。

3Qbmmm6.png!web

因此,显而易见的是:只有那种“天生”就能支持并发性的语言,才更适合于大型、且需要具备可扩展性的软件程序。

下面,让我们继续比较这两种语言的实际应用。

实际应用

由于每种编程语言都有各自特定的应用场景,因此在实际应用中,两者并无明显的优劣。正如Javascript主要被用于Web开发那样,Python如今已被广泛地应用在数据分析、人工智能、深度学习、以及Web开发等领域。当然,这些都归功于Python拥有的强大程序库,它们能够被开发人员轻松且灵活地使用到。

另一方面,Golang主要被用于各种系统的编程场景。由于支持并发性,因此它在云计算和集群计算领域,得到了大量的使用与接受。同样凭借着其强大且易用的程序库,Golang在Web开发中也获得了许多赞赏和应用。您完全可以在几秒钟内构建出一台Web服务器。当然,如果你对Go想进行深入的学习与研究的话,请查看我们为您准备的Golang教程-- https://dzone.com/articles/golang-tutorial-learn-golang-by-examples

执行方式

现在让我们来比较Go代码与Python代码的执行方式。首先,由于Python是一种动态类型的语言,而Golang是一种静态类型的语言,因此Python和Go分别使用的是解释器(interpreter)和编译器(compiler)。

既然上面提到了静态类型语言和动态类型语言,下面我们来理解一下两者之间的区别:静态类型语言是一种需要为编译器显式地声明变量类型的语言。因此我们很容易捕获到程序中的琐碎错误。而动态类型语言在使用变量前不需要声明变量,而全部交给解释器去“打理”,因此如果出现解释器无法正确解释的内容,此类错误则会一直遗留在程序中。

总的说来,由于Python是一种动态类型语言,因此如果程序员想用它来构建超大型项目程序的话,会受到一定的限制;而Go语言则可以处理这两种类型的程序。

接着,让我们来讨论一下它们的程序库。

程序库

IfA3EfI.png!web

众所周知,程序库能够减轻开发人员的重复性工作。因此,拥有一个丰富的编程语言库,对于各类项目的开发是至关重要的。如上图所示,Python带有大量可用的程序库。其中,诸如Numpy之类的软件包可以帮助用户实现各种数组的处理,以及复杂的矩阵函数。另外,Tensorflow和Scikit Learn可被用于深度学习,OpenCV可被用于图像处理,Pandas可被用于数据分析,而matplotlib则可被用于可视化等方面。毫不夸张地说,Python库的丰富程度足以让您应接不暇。

不过,这并不意味着Go在此方面甘拜下风。在对Go语言进行开发时,Google选择了将那些最重要的库作为其内置Go库的一部分。虽然其数量上不如Python那样庞大,但是它们所涵盖的使用领域也几乎是相同的。利用这些广泛的程序库,您可以实现各种类型的Web开发,数据库处理,并发编程,以及加密等操作。

最后,让我们来比较一下两者的可读性。

代码可读性

在为客户开发某个软件项目时,您可能会与上十个、甚至是数百个开发人员协同工作。那么在这种情况下,代码的可读性就显得非常重要且值得谨慎对待了。

许多人肯定认为Python会在此处胜出,但是我却持有不同的意见。乍一看来,Python确实具有出色的可读性,但是它难免有些过犹不及了。在Python中,开发人员可以用十种不同的方式来表达某个相同的事物。而这通常会导致代码的冗长,或者会让不同代码接手人员产生不必要的混淆。

作为对比,Go语言在编程方面有着严格的规则。它既不允许开发人员导入不必要的程序库,又不允许创建各种不必要的变量。这就意味着:我们可以用一种确定的方法去执行各项任务,以便大型的项目组能够更好地理解程序代码。部分新手开发人员可能会对Go代码的多功能性望而生畏,但是在实际用它来进行核心编程的时候,谁又会真正去关心它的多功能性呢?尽管Golang的语法对于初学者来说并不那么友好,但它也不至于像C或C++那样“高攀不起”。因此,为了便于阅读代码,我时常会选择使用Golang。

综上所述,Golang在大多数情况下会略占上风。并且在我看来,作为一种编程语言,它已经胜过了Python。当然,不可否认的是:经过多年的发展,Python已在互联网上积累了大量的人气,并在软件项目中屡屡出现。不过可喜的是,Go语言也正在此方面迎头赶上。同时,我欢迎您发表不同的意见。

原文标题:Golang vs. Python: Which One to Choose?,作者:Aryya Paul

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【责任编辑:庞桂玉 TEL:(010)68476606】


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK