大家好,我是煎鱼。

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 催更。

推荐阅读


煎鱼
8.4k 声望12.8k 粉丝