为什么 Go 不像 Rust 那样使用 ? 来做错误处理?

智数弦歌者
• 阅读 165

大家好,我是煎鱼。

Go 错误处理,一直是个必争之地。为什么不学 Rust 使用 ? 来解决错误处理的问题,也是大家非常好奇的地方。

为此 Go 核心团队成员之一 @Robert Griesemer 给出了官方诠释和解答。以下为其解答的内容。


Go 的设计非常注重可读性!

我们希望即使是不熟悉该语言的人也能理解 Go 代码(这并不意味着每个名称都需要不言自明;毕竟我们还有语言规范)。

截止目前为止,我们已经避免了在 Go 语言中引入各种的神秘缩写或符号,包括不常见的运算符,例如:?,因为这些符号的含义是模糊或不明显的。

一般来说,语言定义的标识符要么是完全拼写的(例如:package、interface、if、append、recover 等)。要么是简写的(例如:struct、var、func、int、len、imag 等)。当然,简写的版本也需要确保明确和易于理解。

而 Rust 引入 ? 是为了缓解 try 和链式语句的问题。而在 Go 中,这个问题要小得多,因为 Go 中的语句往往更简单,链式语句(相对于嵌套)也不常见。

如果 Go 要使用 ? 将需要在语言中引入一个新的后缀运算符。这将需要一个新的标记和新的语法,并需要对大量软件包(扫描器、解析器等)和工具进行修改和开发。

这也会使 Go 未来的修改变得更加困难。而如果未来错误处理使用内置函数来姐姐,则可以消除所有这些问题,同时保持设计的灵活性。

这也是为什么 Go 将不会学 Rust 使用 ? 来做错误处理的原因。

文章持续更新,可以微信搜【脑子进煎鱼了】阅读,本文 GitHub github.com/eddycjy/blog 已收录,学习 Go 语言可以看 Go 学习地图和路线,欢迎 Star 催更。

推荐阅读

点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
捉虫大师 捉虫大师
3年前
Go能实现AOP吗?
hello大家好,我是小楼,今天分享的话题是Go是否能实现AOP?背景写Java的同学来写Go就特别喜欢将两者进行对比,就经常看到技术群里讨论,比如Go能不能实现Java那样的AOP啊?Go写个事务好麻烦啊,有没有Spring那样的@Transactional注解啊?遇到这样的问题我通常会回复:没有、实现不了、再见。直到看了《Go语言底层原理剖析》这本书,
东方客主 东方客主
4年前
go-map源码简单分析(map遍历为什么时随机的)
GO中map的底层是如何实现的首先Go语言采用的是哈希查找表,并且使用链表解决哈希冲突。GO的内存模型先看这一张map原理图(https://imghelloworld.osscnbeijing.aliyuncs.com/49dfa7b81e19fbab143ddc0a7b3b7fa0.png)map再来看
虾米大王 虾米大王
3年前
java代码036
code036.jsp错误处理页错误提示:
虾米大王 虾米大王
3年前
java代码016
code016.jsp错误处理页
科工人 科工人
4年前
一文吃透 Go 语言解密之接口 interface
转载:大家好,我是煎鱼。自古流传着一个传言...在Go语言面试的时候必有人会问接口(interface)的实现原理。这又是为什么?为何对接口如此执着?实际上,Go语言的接口设计在整体扮演着非常重要的角色,没有他,很多程序估计都跑的不愉快了。在Go语言的语义上,只要某个类型实现了所定义的一组方法集,则就认为其就是同一种类型,是一个东西。大家常常称其
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这