无论哪个规模的团队,在开发项目前,难免会通过多次会议讨论来确定最适合他们项目的编程语言。拿现在热门的语言来看,也难免会在近年来大火并且优点很多的golang以及老牌一直很常用的python之间纠结。
这篇文章,则从多个角度对比两种开发语言,希望能给正在纠结项目语言的你做参考,确定最适合你的语言
简要介绍golangGolang,也就是我们常说的Go,是由Google开发的一种计算机编程语言。Golang是于年在Google开始开发的,年面世。Go语言的三位主要开发人员分别是Google的RobertGeriesemer,RobPike和KenThompson。这几位一直以来的目标是创建一种语法上与C语言相似,又能像C++一样消除「多余的垃圾」的语言。以致于Go语言包含现代多种语言的特性,如方法和运算符的重载、指针运算、类型继承。最终,造就了一个带有轻量并强大库以及拥有无敌的性能和速度的静态类型语言。
pythonPython是一种多用途的编程语言,换句话来说它几乎可以做任何事情。Python是由一位荷兰程序员GuidovanRossum编写,于年首次发布。Python最重要的一方面是它是一种高级编程语言,这意味着它非常易于学习和使用。这实际上是其背后的核心思想──将可读性放在首位。Pyhon提供了非常简单的语法,因此开发者几乎可以在不涉及底层编码的情况下完成绝大多数的编程任务。与此同时,Python也是一种面向对象语言。
主要区别谈论到Golang和Python,先来了解一下这两个语言有什么区别
首先Golang是一种强类型静态类型的语言,而Python是一种动态类型的语言。到目前为止,虽然这两种类型的语言优缺点尚有争议,但大多数人似乎倾向于静态语言。静态语言能让程序更容易发现错误,并且更能确定程序执行的预期
语言特性来看,Golang的最大特点是天生支持异步,Golang的标准库把所有io操作都采用异步io实现,这样使得Golang的每个基于标准库开发的库都是支持异步,同时go自带了轻量级的协程,可以用很简单的方法实现多个任务异步执行;而Python则是采用c语言的方法编写库,很多库不一定支持异步io,同时Python也不是天生支持异步的语言。
最重要的一点,GO和Python之间非常重要的区别是面向对象的支持。Python是完整的面向对象支持,Go只能说是面向接口的编程语言
性能性能对于编程语言来说,就像是武功里面的力量,更强劲的性能意味着更少的资源,更快的速度,更稳定的业务
二分搜索我们创建了一个整数列表(从1到),然后使用二分搜索查找始终相同的数字。结果是:
冒泡排序再次,我们生成了一个整数列表(这次是随机的,共个元素),并使用冒泡排序算法对其进行了排序。
文件读取读取同一个文本文件的简单测试。
HTTP请求处理一般go和python都应用在web场景,下面测试的是用web框架输出一个字符串helloworld所需的时间
以上来看,go在速度方面都领先python数10倍有余,明显,性能方面,golang胜过python
并发和异步支持如今,构建一个高可扩展性的应用是一门艺术。如果不做到扩展,那将对业务产生不利影响。Golang在设计的时候便一直在考虑着这件事。Golang的初衷是帮助Google的开发者解决内部大量的问题,这基本上涉及到成千上万的开发者在寄宿于成千上万集群的大型软件服务。这就是Golang具有内置支持并发进程通道(也就是并发性)的原因。而Python并不支持并发,它只是通过多线程来实现并行。
让我们来对比一下golang协程和python多线程
并发(golang协程)并发的意思是说,一个应用在多个任务里同时(并发地)处理多个进程。如果计算机只有一个CPU,则应用程序可能无法在同一时间在多个任务上取得进展,但应用内的线程会在同一时间段内被执行。在下一个任务被执行之前,当前任务并没有完全完成(交替执行)。
并发执行:
并行(python多线程)并行是说应用将它的任务分成多个能在同一时刻执行的多个子任务,把多个任务分配到不同的线程执行,一个线程只能跑一个任务,例如在多个CPU上同时执行。
并行执行:
一般如果采用并发模型,都会设计成一个任务执行中会在io等待的时候被其他任务抢占,这样就可以在单线程里面执行多个任务,每个任务的每个步骤在各个任务等待的间歇之间交错进行,这样cpu线程的利用率可以达到很高
而一般采用并行模型,则是多个任务绑定到多个cpu线程,每个任务在执行的时候一般是完成后别人才有机会绑定到线程执行,因此如果任务占用等待时间比较长,那么这个时间就不能被释放出来给其他任务所使用。
从当今趋势来看,并发执行能在一定时间用更少的线程完成更多的任务,更加符合现在的场景,尤其是微服务,在微服务场景,执行业务可能都要和其他接口打交道,这时候难免会有网络等待之类的时间间隙,如果支持并发模型,则可以好好利用这些时间间隙,因此天生支持异步和并发的golang会更加适合
可读性当一个开发团队已经有一定规模,并且大家都是互相交叉着业务开发。这时,代码可读性会成为被大家考虑的重要因素。
因为python是面向对象语言,大部分人认为Python在可读性上更胜一筹。但是,实际在Python中,同一个功能,可能有10种不同的方式来表达,有的人守旧,用旧的实现,有的人喜欢用新特性,这会导致当代码很大或者协作的人很多时,由于不同风格,不同学习能力的人员开发代码后,造成的风格不统一,以后他人阅读会造成阅读理解困难
python中存在各种黑科技的写法
但是Golang在编程的时候有着严格的规则约束,总体来看,也几乎没有什么很高级的操作,都是很简单易懂的代码规则。Golang的设计原则是用最简单的代码元素构建应用程序,因此,即使对于不同水平的人,看同一段代码,都可以轻松阅读的。
生态圈和应用强大的库以及丰富的生态是开发者的福音,因为它能使我们的开发工作更容易。因此,拥有一个优秀的库对编程语言来说是至关重要的。在本节的比较中,Python肯定以量获胜。比如可以让你使用数组来处理复杂的矩阵问题的Numpy库,专注深度学习的Tensorflow库和ScikitLearn库、针对图像处理的OpenCV、数据分析的Pandans、可视化的matplotlib,等等等等~。讲真,如果Python仅是因为一件事而闻名,那必定是它的库。
在应用上,Python被广泛地用于数据分析、人工智能、深度学习以及Web开发。
python使用广泛的工具和应用
但这并不意味着Go逊色于它。当Go在被开发的时候,Google将一些很重要的库以内置的形式作为Go语言的一部分。虽然从数量上来讲没有Python的那么猛,但它的库所涉及的领域和Python是一样广的。它有针对Web开发(例如gin、beego)、数据库处理(mysql)、并发编程以及加密的强大的库。在云计算场景里面,Docker容器技术,Google开源著名的容器编排系统Kubernetes,最近比较火的监控工具Prometheus等等这些业界功能强大的系统都是用Golang开发的
在应用上,Golang更适合用于系统编程。这归结于它天然支持并发,在云计算和集群计算领域中使用广泛。同时由于golang打包出来仅仅只有一个二进制文件,这让Golang部署不像其他语言需要入侵系统环境,这样开发出来的系统级工具可以广泛运用到运维的场景,同时Golang也拥有强大易用的库,可以让你很快搭建出一个Web服务,并且天生支持并发能让Web服务更具有性能。
golang为云计算构建强大的生态
结论结论是谁赢了呢?其实还是得看场景的,因为两种语言都在不同的场合有着重要的作用
Python的长处,数据统计分析,刚好就是golang的短板;而Golang的长处,在Python身上恰好又是短板。
如果我为了提高团队的web开发效率和生产力,因为更强的性能,更统一的代码风格,我会选择Golang
如果说web开发的未来,我觉得Go是没有问题的,因为随着这几年来go的社区不断壮大,并且库的支持也越来越完善,再加上未来是云原生的时代,至少在未来web领域,Python会逐渐被Go取代。
近期文章基于一栋楼+终端网络架构方案,又来了
深究k8s弃用docker的背后
运维部署之从刀耕火种到面向终态
弱网测试平台分析
从原理到实践理解MySQL索引
END
全中国只有不到1%的人