关于go:Go-错误处理100-提案全部被拒绝为何现阶段仍用-if-err-nil

34次阅读

共计 1468 个字符,预计需要花费 4 分钟才能阅读完成。

大家好,我是煎鱼。

这些年给 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 标签就能够了。

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

  • Go2 check/handle 办法

    • 次要起因之一:handle 和 defer 之间不足清晰度。
    • 关联文章:先睹为快,Go2 Error 的挣扎之路
  • 常被提起的 try-catch 办法

    • 次要起因:额定的流程管制,应用 try 的简单表达式可能导致函数返回。Go 目前在表达式级别没有控制流构造(panic 除外),会引入额定设计。
    • 关联文章:Go try 新提案靠谱吗?想简化错误处理了
  • 像 Rust 用 ! ? 作为谬误查看

    • 次要起因:! ? 都比拟的费解,会导致心智累赘加大,会导致控制流发生变化。
    • 关联文章:Go 为什么不像 Rust 用?!做错误处理?
  • 简化 if err != nil {} 缩小代码量

    • 次要起因:只是为了代码量,就因而导致变更语言;同时也会导致复杂性加大,因为通常都比拟的费解。这类提案通常都会被回绝。
    • 关联文章:Go 只会 if err != nil?这是不对的,分享这些优雅的解决姿态给你!
  • 应用左侧函数和表达式来代替

    • 次要起因:Go 设计哲学上不倡议这种做法,与常见的浏览代码习惯会有些相悖,升高了代码可读性。
    • 关联文章:Go 错误处理新思路?用左侧函数和表达式

常见的根本是这几类,有许多雷同的,或被回绝起因相似的提案,在社区治理上最终都会被指向到一起并敞开。

你能够通过上述提案的前因后果,能够看到 Go 外围团队的一些掂量标杆。根本就是:显式、简洁、省心、好用。

总结

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

现阶段还是好好的用 if err != nil,也是许多人认可的。或是本人团队内封装一套共识规范,也是能够的。

让风再吹一会。

文章继续更新,能够微信搜【脑子进煎鱼了】浏览,本文 GitHub github.com/eddycjy/blog 已收录,学习 Go 语言能够看 Go 学习地图和路线,欢送 Star 催更。

Go 图书系列

  • Go 语言入门系列:初探 Go 我的项目实战
  • Go 语言编程之旅:深刻用 Go 做我的项目
  • Go 语言设计哲学:理解 Go 的为什么和设计思考
  • Go 语言进阶之旅:进一步深刻 Go 源码

举荐浏览

  • Go1.20 arena 能手动治理内存了,怎么用?
  • Go 在信创这一块会输给 Java,想不通。。。
  • 写在 2023 年初的后端社招面试经验(四年教训):字节 米哈游 富途 猿辅导
正文完
 0