Go 错误处理:100+ 提案全部被拒绝,为何现阶段仍用 if err != nil?

大家好,我是煎鱼。

这些年给 Go 提新的错误处理提案的人络绎不绝,挡都挡不住。Ian Lance Taylor 作为历史的亲历者之一特意梳理了《language: Go 2: error handling meta issue》。

今天结合我自己写过的内容分享给大家,以后有人再问可以甩给他们,这样他就懂前因后果了。

背景

在 2018 年 8 月,现任 Go 核心团队负责人 Russ Cox 给 Go2 的错误处理画了一个大大的蓝图,并介绍了一个未实现的设计草案。

具体目标如下:

  • 期望 Go 的错误检查更轻量级,能够减少被大家吐槽的错误检查的程序文本数量。整体上要确保错误处理更加方便,复杂度不能变高。
  • 错误检查和错误处理都必须保持显式,这意味着在 Go 程序中是可见的。我们不想重复异常处理的陷阱。
  • 必须保证现有的 Go 代码的兼容性,不能有破坏性升级。

在此之后,也由于 Go 的热浪,许多新的提案作为 Go2 的错误处理变更提交,Go 邮件也有大量的讨论,拥有许多尝试,但迄今为止没有一个被接受

这就是现在 Go 错误处理的背景。

错误处理合集

当然,这个合集并不 100% 全面,如果需要全查看一遍,可以自行在 go/issues 库搜索 error-handling 标签就可以了。

以下是一些值得关注的错误处理提案合集:

常见的基本是这几类,有许多雷同的,或被拒绝原因类似的提案,在社区管理上最终都会被指向到一起并关闭。

你可以通过上述提案的前因后果,可以看到 Go 核心团队的一些衡量标杆。基本就是:显式、简洁、省心、好用。

总结

Go 的 “新” 错误处理已经经历了 3,5 年了,许多社区友人已经想了许多许多,也提出了许多提案。在 error-handling 标签下共有 100+ 个提案,无一幸免,全部被拒绝。

现阶段还是好好的用 if err != nil,也是许多人认可的。或是自己团队内封装一套共识标准,也是可以的。

让风再吹一会。

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

Go 图书系列

推荐阅读


煎鱼的清汤锅
今天写代码了吗 :-) 博客地址:[链接]
8.2k 声望
12.8k 粉丝
0 条评论
推荐阅读
Go1.21 速览:骚操作 panic(nil) 将成为历史!以后别这么干了。。。
大家好,我是煎鱼。在 Go 语言中,返回错误、抛出异常一直是大家比较关注的话题。在抛出异常上,我们一般都是这么用的: {代码...} 运行结果: {代码...} 这看起来一切正常,没什么问题的样子。隐晦的雷其实在现...

煎鱼阅读 170

终于卷完了!Redis 打怪升级进阶成神之路(2023 最新版)!
是一种非关系型数据库服务,它能解决常规数据库的并发能力,比如传统的数据库的IO与性能的瓶颈,同样它是关系型数据库的一个补充,有着比较好的高效率与高性能。专注于key-value查询的redis、memcached、ttserver。

民工哥12阅读 1k

封面图
花了几个月时间把 MySQL 重新巩固了一遍,梳理了一篇几万字 “超硬核” 的保姆式学习教程!(持续更新中~)
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

民工哥14阅读 2k

封面图
golang学习之旅——解开心中的go mod疑惑
在go1.16版本发布后,go module由原来的默认值 auto 变为 on 了,这意味着后续开发中,go更推荐用go module 模式开发,而不是gopath模式开发了。

Keson11阅读 14.8k

算法可视化:一文弄懂 10 大排序算法
在本文中,我们将通过动图可视化加文字的形式,循序渐进全面介绍不同类型的算法及其用途(包括原理、优缺点及使用场景)并提供 Python 和 JavaScript 两种语言的示例代码。除此之外,每个算法都会附有一些技术说...

破晓L8阅读 958

封面图
硬卷完了!MongoDB 打怪升级进阶成神之路( 2023 最新版 )!
前面我们学习:MySQL 打怪升级进阶成神之路、Redis 打怪升级进阶成神之路,然后我们还在继续 NoSQL 的卷王之路。从第一篇文章开始,我们逐步详细介绍了 MogoDB 基础概念、安装和最基本的CURD操作、索引和聚合、工...

民工哥6阅读 580

封面图
「刷起来」Go必看的进阶面试题详解
逃逸分析是Go语言中的一项重要优化技术,可以帮助程序减少内存分配和垃圾回收的开销,从而提高程序的性能。下面是一道涉及逃逸分析的面试题及其详解。

王中阳Go4阅读 1.9k评论 1

封面图
8.2k 声望
12.8k 粉丝
宣传栏