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 使用 ?
来做错误处理的原因。