相比于Python的40个特性,Go只有31个,可以说Go在语言设计上是相当克制的。比如,它没有隐式的数值转换,没有构造函数和析构函数,没有运算符重载,没有默认参数,也没有继承,没有泛型,没有异常,没有宏,没有函数修饰,更没有线程局部存储。

但是Go的特点也很鲜明,比如,它拥有协程、自动垃圾回收、包管理系统、一等公民的函数、栈空间管理等。

Go作为静态类型语言,保证了Go在运行效率、内存用量、类型安全都要强于Python和Erlang。

Go的数据类型也更加丰富,除了支持表、字典等复杂的数据结构,还支持指针和接口类型,这是Python和Erlang所没有的。特别是接口类型特别强大,它提供了管理类型系统的手段。而指针类型提供了管理内存的手段,这让Go进入底层软件开发提供了强有力的支持。

Go在面对对象的特性支持上做了很多反思和取舍,它没有类、虚函数、继承、泛型等特性。Go语言中面向对象编程的核心是组合和方法(function)。组合很类似于C语言的struct结构体的组合方式,方法类似于Java的接口(Interface),但是使用方法上与对象更加解耦,减少了对对象内部的侵入。Erlang则不支持面对对象编程范式,相比而言,Python对面对对象范式的支持最为全面。

在函数式编程的特性支持上,Erlang作为函数式语言,支持最为全面。但是基本的函数式语言特性,如lambda、高阶函数、curry等,三种语言都支持。

控制流的特性支持上,三种语言都差不多。Erlang支持尾递归优化,这给它在函数式编程上带来便利。而Go在通过动态扩展协程栈的方式来支持深度递归调用。Python则在深度递归调用上经常被爆栈。

Go和Erlang的并发模型都来源于CSP,但是Erlang是基于actor和消息传递(mailbox)的并发实现,Go是基于goroutine和管道(channel)的并发实现。不管Erlang的actor还是Go的goroutine,都满足协程的特点:由编程语言实现和调度,切换在用户态完成,创建销毁开销很小。至于Python,其多线程的切换和调度是基于操作系统实现,而且因为GIL的大坑级存在,无法真正做到并行。

而且从笔者的并发编程体验上看,Erlang的函数式编程语法风格和其OTP behavior框架提供的晦涩的回调(callback)使用方法,对大部分的程序员,如C/C++和Java出身的程序员来说,有一定的入门门槛和挑战。而被称为“互联网时代的C”的Go,其类C的语法和控制流,以及面对对象的编程范式,编程体验则好很多。

python go 的区别相关推荐

  1. php7和python3性能对比-Python 2.7与Python 3.7区别

    今天,我将带大家看看Python 2.7与Python 3.7这两个版本区别. 区别一:print语法使用 Python2.7 print语法使用 >>> print "H ...

  2. c语言 python-C语言、Java语言和python语言的区别在哪里

    原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...

  3. Python is 和 == 区别 - Python零基础入门教程

    目录 一.前言 二.Python 运算符 == 三.Python 运算符 is 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 ...

  4. Python Pycharm Anacanda 区别

    工欲善其事必先利其器,在学习 Python 开发之前我们首先来熟悉几个关键字: 1.Python 2.Pycharm 3.Anacanda 零基础 Python 学习路线推荐 : Python 学习目 ...

  5. c语言 python java_C语言、C++、Java,Python之间的区别,哪个更有前景,哪个更难 ?...

    从这四种语言的难度.受欢迎度还有作用以及优点缺点给楼主做一个全面的分析,我们可以从中了解其区别,以及难易程度.至于今后可以用到的或者是前景问题,根据自己的职业发展大家可以自己做个分析.最后会总结一下他 ...

  6. go语言和python的区别_golang和python有什么区别?

    golang和python有什么区别?下面本篇文章给大家对比一下Python和Golang,介绍一下golang和python的区别.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. ...

  7. python与java区别-Java与Python到底有什么区别和共同点详细对比

    JAVA:Java是一种计算机编程语言,最常用于开发Android智能手机应用程序.它于1995年由Sun Microsystems的James Gosling首次发布,后来被Oracle Corpo ...

  8. python和c语言的区别-C语言、Java语言和python语言的区别在哪里

    原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...

  9. python和java的区别-python与java区别

    Python和Java都是很火的编程语言,对于想学习编程的人员来说,常常被这个问题所困扰:我是该学Python还是Java呢?想要解决这个问题,还需结合自身实际情况和两种语言的特点进行分析. 以下是P ...

  10. pycharm中创建的dictionary与python package的区别

    在pycharm中,创建的dictionary(目录)与python package的区别 python package 这是一个特殊的目录,因为在创建该python package的时候,系统会自动 ...

最新文章

  1. java人脸识别_Python 实现在 App 端的人脸识别!手机解锁人脸识别
  2. 的训练过程_指外翻的人在训练的过程中,要不要拉伸收肌?
  3. 7-1 多数组排序 (12 分)三种做法(冒泡排序 ; 重写sort方法 ;利用sort和栈)
  4. Linux在线扫描热添加的SCSI/iSCSI设备
  5. 机载计算机结构,机载计算机
  6. calendar获取本周一的日期_Java Calendar 获取本周周一和周日代码
  7. html 中加号的表示方法,CSS的+(加号)选择器怎么用
  8. spring boot 集成Mybatis时 Invalid bound statement (not found)
  9. Thread.join(), CountDownLatch、CyclicBarrier和 Semaphore区别,联系及应用
  10. C#中的volatile关键字
  11. 【路径规划】基于matlab GUI改进的DWA算法机器人静态避障路径规划【含Matlab源码 678期】
  12. Perl语言入门到精通学习路线
  13. 计算机输入法知识讲解,第一讲计算机基础知识及微软拼音输入法
  14. 12306订票候补是个坑_12306候补购票好几天了都没兑现成功是不是凉凉了?
  15. fastlane二开java_Fastlane 使用手册(二)
  16. arduino中print()跟write()最大区别和注意事项 (最详细)
  17. 小米随身wif linux平台配置
  18. 微信开发者工具首次登陆提示网络连接失败
  19. HTC Lengend G6上网-彩信设置
  20. Unity3d实现扭动挤压浏览效果

热门文章

  1. php twig if,如何使用短语法使用Twig检查变量是否存在以及是否为空
  2. 模块pygame介绍以及库的下载
  3. 使用键盘移动鼠标指针
  4. 智能车校内赛图像处理
  5. 《重说中国近代史》—张鸣——(2)战争的开始
  6. 在Xshell上下载vim
  7. 校园网拨号上网一直掉线但实际网络通路是连接着的
  8. OpenSSL自建CA和签发二级CA及颁发SSL证书
  9. linux 怎么看节点核数,Linux怎么查看CPU核数?-linux运维
  10. 2021阿里云申请免费SSL证书最新流程