优点

上手简单,学习成本很低。人生苦短,我用Python。这绝不仅仅是一句口号,如果你以前被C/C++毒打过,你会对此有更深刻的理解。

丰富的库:Python有非常强大的标准库,特别是数据科学相关的库,这也是为什么那么多人用Python进行数据分析。你几乎可以在库里找到你想要的任何功能,库里没有的功能,你还可以用开源项目来替代,Python加开源项目,软件开发从来没有像现在这么简单和高效。

融合性好:Python与C/C++有天然的融合性。在你的Python项目中,部分功能可以用C/C++来编写,同样的,你可以把Python做为脚本嵌入你的C/C++程序。

缺点

运行效率慢:相对于C/C++,甚至是Golang,Python的执行效率太慢了。慢的原因有很多,比如Python是解释型语言,GIL伪多线程等等诸多原因。这个可以单独开一篇文章来写了,我们只需知道,越是对开发者友好的、越偏离机器底层的语言,运行效率越低。还记得我们开篇说的话么,软件工程领域没有银弹!

线程不能利用多CPU:我们都知道,Python 并非是对内存/CPU 友好的语言。这个就是我们上一条说的GIL,全局解释器锁(Global Interpreter Lock)(GIL),现在的计算机都是多核的CPU和处理器,在我们编写多线程的程序时,Python的解释器会保证同一时刻,只有一个线程在一个CPU上执行字节码,无法将多个线程映射到多个CPU上。这是Python执行效率慢的一个主要原因。

加密困难:Python的源码都是以名文形式存放的,不像编译型语言的源程序会被编译成目标程序。不过如果你的项目对加密要求很高,那这个项目一开始就不应该选择Python来开发。

相比于Python,Golang的执行效率要快得多,但依然也有它不可避免的缺陷。

Golang

优点

强大的并发编程:Golang无疑要比Python快很多,并且Golang从语言层面上就支持了并发。其内置并发性允许同时处理多项任务。goroutines和通道的概念一直为人所津津乐道。

我们可以把goroutines理解成轻量级的线程,每一个并发执行的活动成为goroutine,其创建成本和开销都很小,每个goroutine的堆栈只有几kb,所以在高并发编程方面,Golang具有天生的优势。

如果说goroutine是Golang并发的执行体,那么”通道”就是他们之间的连接。是多个goroutine之间交换信息的媒介。正由于此,才使得同时运行数百个甚至数千个 goroutines 成为可能。

高效的开发效率:在兼顾C语言的运行速度的同时,拥有媲美PHP的开发效率,这也是为什么Golang这么受企业追捧的一个根本原因。

生态强大:Golang的库虽然不如Python那么大而全,但依然强大,覆盖网络、系统、编码、图形及加密方方面面。面向 Redis、RabbitMQ、PostgreSQL、RocksDB等都有稳定的库做为支持。

然而,尽管Golang是一门优秀的语言,但其缺点也是非常鲜明的。

缺点

缺少主要框架:谈起Java的主要框架,毋庸置疑,必然是Spring。谈起PHP,我们想到的代表性框架肯定是ThinkPHP和Laravel 。谈起Golang,你能想到的框架是什么?

依赖管理:相对于Java和Python对软件包的管理,Golang在这方面做的真的是一言难尽。在1.11版本之前,最多以“勉强能用”这个词来形容。你能想象到在早期的版本中,它没有办法制定特定版本的依赖库么。在之后推出go mod这个管理工具后,情况有了一点缓解,但问题依然没有完全的解决。

如果还不知道如何选择,那么小编再教你一个方法,现在闭上眼睛,把之前想的两门语言的优缺点都忘掉,你现在只需考虑一个问题,下面两个领域哪个是你想从事的:

  • AI、ML 和数据分析&数据挖掘领域
  • 系统编程,云计算与微服务架构领域

如果是第一个,不要犹豫,Python是你最优的选择。如果是第二个,那么Golang可能会更适合你。

如果你担心Golang在市场的接受度不高,想选择一门稳重的语言,那要不要来一杯82年的Java?(手动滑稽)