go比python的优缺点

  • 部署简单。go编译生成的是一个静态可执行文件,除了glibc外没有其他外部的依赖。这让部署变得异常方便:目标机器只需要一个基础的系统和必要的管理,监控工具,完全不需要操心应用需要的各种包,库的依赖关系,大大减轻了维护的负担。这和python有着巨大的区别。由于历史原因,,python的部署工具生态相当混乱,比如setuptools,istutils,ip,buildout的不同使用场合以及兼容性问题。官方PYPI源有经常出问题,需要搭建私有镜像,而维护这个镜像又要花费不少时间和精力。
  • 并发性好。Goroutine和channel使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题。单个go应用也能有效的利用多个CPU内核,并行执行的性能好。这和python也是天壤之别。多线程和多进程的服务端程序编写起来并不简单,而且由于全局锁GIL的原因,多线程的Python的程序并不能有效利用多核,只能用多线程的方式部署;如果用标准库里的multiprocessing包又会对监控和管理造成不少的挑战(我们用的supervisor管理进程,对fork支持不好)。部署python应用的时候通常是每个CPU核部署一个应用,这会造成不少资源的浪费,比如假设某个python应用启动后需要占用100MB内存,而服务器有32个CPU核,那么留一个核给系统,运行31个应用副本就要浪费3GB的内存资源。
  • 良好的语言设计。从学术的角度讲go语言其实非常平庸,不支持许多高级的语言特性;但从工程的角度讲,Go的设计是非常优秀的:规范足够简单灵活,有其他语言基础的程序员都能迅速上手。更重要的是Go自带完善的工具链,大大提高了团队协作的一致性。比如gofmt自动排版go代码,很大程度上杜绝了不同人写的代码排版风格不一致的问题。把编辑器配置成在编辑存档的时候自动运行gofmt,这样在编写代码的时候可以所以拜访位置,存档的时候自动变成正确排版的代码。此外还有gofix,govet等非常有用的工具。
  • 执行性能好。虽然不如c和java,但通常比原生python应用还是搞一个数量级的,适合编写一些瓶颈业务。内存占用也非常省。

python

  • 解释型语言

    程序不需要在运行前编译,在运行程序的时候才编译,专门的解释器负责在每个语句执行的时候解释程序代码。这样的解释型语言每执行一次就要翻译乙烯,效率比较低。

  • 动态数据类型

    支持重载运算符,也支持泛型设计。(运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以使用不同的数据类型。泛型设计就是定义的时候不需要指定类型,在客户端使用的时候再去指定类型)

  • 完全面向对象的语言

    函数,模块,数字,字符串都是对象,在python,一切皆对象

    完全支持继承,重载,多重继承

  • 拥有强大的标准库

    python 语言的核心只包含数字,字符串,列表,元组,字典,集合,文件等产检类型和函数,而由python标准库提供了系统管理,网络通信,文本处理,数据库接口,图形系统,xml处理等额外的功能。

  • 社区提供了大量的第三方库

    python社区提供了大量的第三方模块,使用方式与标准库类似。他们的功能覆盖科学计算,人工智能,机器学习,web开发,数据库接口,图形系统多个领域

golong

  • 静态强类型,编译型,并发型

    静态类型语言,但是有动态语言的感觉。(静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉是有很多的包可以使用,写起来的效率很高)

    可直接变异成机器码,不依赖其他库,glibc版本有一定要求,部署就是扔一个文件上去就完成了。

    语言层面支持并发,这个就是go最大的特色,天生的支持并发。GO就是基因里面支持的并发,可以充分的利用多核,很容易的使用并发。

  • 垃圾回收机制

    内置runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说Gc(内存垃圾回收机制)不算完美,但是足以应付我们所能遇到的大多数情况,特别是Go1.1之后的Gc

  • 支持面向对象编程

    有接口类型和实现类型的概念,但是用嵌入代替了继承。

  • 丰富的标准库

    go目前已经内置了大量库,特别是网络库非常强大

  • 内嵌c支持

    go里面也可以直接包含c代码,利用现有的丰富的C库

应用:

python

  • 网络编程

    web应用,网络爬虫

  • 数据分析和机器学习

  • 自动化测试

  • 自动化运维

golong

  • 服务器编程

    处理日志,数据打包,虚拟机处理,文件系统等

  • 分布式系统,数据库代理期等

  • 网络编程

    这一块目前应用最广,包括web应用,API应用,下载应用

  • 内存数据库

    如google开发的groupcaphe,couchbase的部分组件

  • 云平台

go语言的缺点

  • 缺少框架(go语言没有一个主要的框架)

  • 错误处理

    • go语言通过函数和语气的调用代码简单的返回错误(或返回调用堆栈)而帮助开发者处理编译报错。虽然这种方法是有效的,单数很容易丢失错误发生的范围,因此我们也很难想用户提供有意义的错误信息。错误包(errors package)可以允许我们添加返回错误的上下文和堆栈追踪而解决该问题
    • 另一个问题是我们可能会忘记处理报错。诸如errcheck和megacheck等静态分析工具可以避免出现这些失误。虽然这些解决方案十分有效,但可能并不是那么正确的方法。
  • 软件包管理

    go语言的软件包管理绝对是不完美的。默认情况下,他没有办法制定特定版本的依赖库,也无法创建可复写的builds。相比之下python,node和ruby都有更好的软件包管理系统。然而通过正确的工具,go语言的软件包管理也可以表现得不错。

    我们可以使用dep来管理依赖项,他也能指定的软件包版本。除此之外,我们还可以使用一个名为virtualgo的开源工具,他能轻松的管理go语言编写的多个项目。

(ps:本篇博客由作者通过资料总结,如有侵权请联系删除)

go比python的优缺点相关推荐

  1. Python的优缺点介绍

    Python是一种面向对象.解释性.通用性和开源性的脚本编程语言.在下面的文章中,我们将总结Python的特点,并综合比较其优缺点. Python是一种面向对象.解释性.通用性和开源性的脚本编程语言. ...

  2. Python的优缺点

    Python的优缺点 优点 简单--Python是一种代表简单概念的语言.阅读一个好的Python程序就像阅读英语一样,尽管这个英语的要求很严格!python的伪代码特性是其最大的优势之一.它使你能够 ...

  3. python的优缺点有哪些-Python语言的优缺点有哪些

    我们参加python培训学习的都知道,这是个比较高薪的编程语言,那么对于它的应用优缺点大家知道多少呢?那我们今天就来该大家分析一下. 优点 1.在python程序来看简单易懂,易于操作,对于初学者来说 ...

  4. python的优缺点有哪些-那么多人选择Python,它的优缺点有哪些?

    提及到目前最火的编程语言,Python可谓是非常受欢迎的,属于四大编程语言之一,近些年来Python的增长趋势也是非常明显的,很多人都将Python作为入门的语言,对于很多人来说都会选择学习Pytho ...

  5. 电脑编程python和c加加语言的区别_小猿圈之Bash 和 Python 编程语言优缺点

    Bash 和 Python 是大多数自动化工程师最喜欢的编程语言.它们各有各的优缺点,有时候我们很难抉择,所以,最好的选择它们取决于任务.范围任务的复杂性,跟着小猿圈老师一起来了解一下吧. 让我们来比 ...

  6. c和python的优缺点_Python语言有什么优缺点?

    在很多人眼中,Python是一门全能语言,可以做很多的事情,那么你知道Python有什么优缺点吗?我想这是很多人都比较好奇的问题,我们一起来看看吧. 优点: Python是一种代表简单主义思想的语言, ...

  7. python编程语言优缺点_Python和PHP的优缺点对比

    Python和PHP的优缺点对比 发布时间:2020-06-25 17:58:58 来源:亿速云 阅读:116 这篇文章将为大家详细讲解有关Python和PHP的优缺点对比,文章内容质量较高,因此小编 ...

  8. 最全的Python IDE 优缺点整理,看这篇就够了!

    作者:Django Stars 机器之心编译 参与:魔王 本文介绍了多个 Python IDE,并评价其优缺点.读者可以参考此文列举的 Python IDE 列表,选择适合自己的编辑器. 写 Pyth ...

  9. python的优缺点及应用场景

    Python优缺点 优点 1.简单:Python是一种代表简单主义思想的语言.阅读一个良好的Python程序就感觉像是在读 英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的 ...

最新文章

  1. Angular的ChangeDetectorRef.detectChanges()实现angularJS的$apply()方法,强制刷新数据渲染
  2. Hadoop API编程——FileSystem操作
  3. 数据挖掘十大经典算法之——K-Means 算法
  4. 让你的网页达到最好的视觉效果
  5. 怎样禁用计算机里的防病毒程序,Windows Defender防病毒程序已在Windows 10上完全永久禁用...
  6. openstack前世今生
  7. 72、android状态栏一体化,状态栏改变颜色
  8. [c++] volatile关键字
  9. [css] 你知道css的预处理器和后处理器都有哪些吗?它们有什么区别呢?
  10. 华为8lite支持云闪付吗_2K/120Hz屏?华为P40Pro尊享版价格曝光 | 一加8曝4.15发布
  11. 读取doc文件c语言程序,c语言程序中关于文件的操作.doc
  12. Centos7 完全卸载mysql5.7
  13. excel数据库_EXCEL数据库DSUM DMAX DMIN DAVERAGE函数的用法
  14. beam search(束搜索)与 vliterbi(维特比算法);语音识别算法vad、asr、tts
  15. 一文说透Sentinel熔断策略、降级规则、流量控制
  16. MFC中CImage类显示的半透明PNG存在的问题以及处理方法
  17. Python从Word/PPT/PDF中抽取图片
  18. python opencv 图像大小_python使用OpenCV设置图片尺寸
  19. mac修改localhost为指定ip_使用 macOS 服务器更改服务器的 IP 地址
  20. 【flask】蓝图(Blueprint)

热门文章

  1. pytorch 实现Faster R-cnn从头开始(一)
  2. 0.96寸IIC接口ssd1306和ssd1315驱动oled12864屏幕介绍
  3. Linux入门学习——ssh基础操作
  4. Linux组播编程 组播发送和组播接收
  5. 小程序集成Three.js,使用npm安装gsap动画库
  6. android七牛多张图片上传
  7. 虚拟化中的链接克隆技术
  8. 部门换届推文文字_我院举行第二届学生代表大会暨学生会换届大会
  9. Mysql——》查看数据库表结构
  10. linux中各种error意思