选择Python而不选择Go语言的原因
选择Python而不选择Go语言的原因,今天我们就来谈一谈。现在网上关于Go语言和Python语言的话题还真的不少,本月刚好是Go语言诞生3周年。这个语言在谷歌巨人的推动下最终很可能成为今后的主流语言。
由于一篇为什么我不会舍弃Python投奔Go语言(英文) 的博客,我收到了大量的邮件,作者说Go语言除了“用返回值来处理异常错误”这点以外,其它的都非常好。
我想写出一点东西,解释一下Go语言为什么这样做,这会对大家都有用。
有些操作基本上不会出错,所处的环境根本不可能给你提示错误信息,不可能控制错误。这才是让人痛苦的地方。典型的例子;一个程序执行x[j],j值超出数组边界,这才痛苦。像这样预料之外的麻烦在程序中是一个严重的bug,一般会弄死程序的运行。不幸的是,由于这种情况的存在。我们很难写出健壮的,具有自我防御的服务器——例如,可以应付偶然出现的有bug的HTTP请求处理器时,不影响其他服务的启动和运行。
为解决这个问题,我们引入了恢复机制。它能让一个go例程从错误中恢复,服务余下设定的调用。然而,代价是,至少会丢失一个调用。这是特意而为之的。引用邮件中的原话:这种设计不同于常见的异常控制结构,这是一个认真思考后的决定。我们不希望像java语言里那样把错误和异常混为一谈。
有一个你需要记在心里的事情是,Go语言是为大型软件设计的。我们都喜欢程序简洁清晰,但对于一个由很多程序员一起开发的大型软件,维护成本的增加很难让程序简洁。异常捕捉模式的错误处理方式的一个很有吸引力的特点是,它非常适合小程序。
Go语言中规定的方式是,函数返回的错误信息。如果一个文件并不存在,op.Open函数会返回一个错误信息。如果你向你一个中断了的网络连接里写数据,net.Conn里的Write方法会返回一个错误。
这种状况在这种程序中是可以预料到的,这种操作就是容易失败,你知道程序会如何运行,API的设计者通过内置了一种错误情况的结果而让这一切显得很清楚。
但对于大型程序库,如果对于一些普通操作,你都需要考虑每行代码是否会抛出异常、是否有必要捕捉处理,这对于开发效率和程序员的时间来说都是非常严重的拖累,我自己做开发大型Python软件时感受到了这个问题。
Go语言的返回错误方式,不可否认,对于调用者不是很方便,但这样做会让程序中可能会出错的地方显的很明显,对于小程序来说,你可能只想打印出错误,退出了程序。对于一些很精密的程序,根据异常不同,来源不同,程序会做出不同的反应,这很常见,这种情况中,try + catch的方式相对于错误返回模式显得冗长。
在我们的Python里面一个10行的代码放到Go语言里很可能会更冗长,Go语言主要不是针对10行规模的程序。
玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/news/a125.html
相关文章 Recommend
- • 2019年3月最新消息: Python 3.4.10 现已推出
- • [上海]招Python量化系统开发工程师
- • 优集品网络科技有限公司招Python中/高级工程师
- • 爱因互动科技发展有限公司招募Python开发攻城狮
- • mozio招聘Python/Django工程师
- • Kavout金融科技公司招Python研发工程师
- • Python数组逆向输出,编程练习题实例四十
- • Python数组插入排序,编程练习题实例三十九
- • Python矩阵for循环应用,编程练习题实例三十八
- • Python操作Redis数据库方面的问题
- • 请python高手帮我看看这段python代码中函数setter的
- • Python什么方法可以快速将两个队列变成字典
必知PYTHON教程 Must Know PYTHON Tutorials
- • python 解释器
- • python idle
- • python dir函数
- • python 数据类型
- • python type函数
- • python 字符串
- • python 整型数字
- • python 列表
- • python 元组
- • python 字典
- • python 集合
- • python 变量
- • python print
- • python 函数
- • python 类定义
- • python import
- • python help
- • python open
- • python 异常处理
- • python 注释
- • python continue
- • python pass
- • python return
- • python global
- • python assert
- • python if语句
- • python break
- • python for循环
- • python while循环
- • python else/elif
- • lambda匿名函数
必知PYTHON模块 Must Know PYTHON Modules
- • os 模块
- • sys 模块
- • re 正则表达式
- • time 日期时间
- • pickle 持久化
- • random 随机
- • csv 模块
- • logging 日志
- • socket网络通信
- • json模块
- • urlparse 解析URL
- • urllib 模块
- • urllib2 模块
- • robotparser 解析
- • Cookie 模块
- • smtplib 邮件
- • Base64 编码
- • xmlrpclib客户端
- • string 文本
- • Queue 线程安全
- • math数学计算
- • linecache缓存
- • threading多线程
- • sqlite3数据库
- • gzip压缩解压
最新内容 NEWS
- • 2019年3月最新消息: Python 3.4.10 现已推出
- • 支付宝官方给力福利!每天可领1个红包,
- • Dino Esposito CQRS 消息以及事件看法
- • 树莓派 raspi驱动LoRaWAN基站
- • Kuzzle内部部署文档后端
- • Java 9跳票 发布时间将迟至2017年3月
- • iOS Apple 停止Ad 广告业务
- • Microsoft UWP上支持React Native
- • Angular移动工具集Web应用原生感觉
- • Windows 10周年更新Edge浏览器支持扩展
图文精华 RECOMMEND
-
支付宝官方给力福利!每天可领
-
选择Python而不选择Go语言的原因
-
Python相关的软件团队未来离不开
-
Ubuntu磁盘缓存模块提供 缩略图服
-
Python程序员,2016一起告别码农!
-
为什么企业很难招聘到好的pytho
热点文章 HOT
- 支付宝官方给力福利!每天可领1个红包,
- 使用Python语言编写的Fuzzing第三方框架
- 超级QQ这个服务有可能会整合到QQ普通会员
- 正在创业者的你是否在经历O2O的那些坑
- 索尼PlayStation TV机顶盒650RMB左右
- 你N年前可想到今天的迅雷股价如此之高
- 阿里集团的公共DNS正式发布:223.5.5.5 223.
- Apache Qpid Python 最新1.35.0 版本发布