关于后端:Go-为什么不像-Rust-用-做错误处理

39次阅读

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

大家好,我是煎鱼。

之前每次写 Go 错误处理的相干提案时,大家都会在评论区探讨到一个事。

Go 这活不得劲,常被戏称,一个大型 Go 工程项目里 60% 的代码都是 if err != nil

咱们错误处理怎么不借鉴一下 Rust,高下也整个问号的语法个性,就能够简化这三行了,不香吗?

借鉴 Rust 用?!| 符号

外围的点是在现有的 Go 例子中,咱们个别要写 if err != nil,多了之后又多又杂看起来还有些麻烦。

如下 Go 代码:

count, err = fd.Write(bytes)
if err != nil {return nil, err}

如果咱们也借鉴 Rust 应用 ! 和?的简化版,咱们能够演进为如下代码:

count := fd.Write!(bytes)
count := fd.Write(bytes)!
count := fd.Write(bytes)?

也有大佬提到能够演进一下应用 || 变成:

fd.Write(bytes) || Expr

不论如何,就是不须要写三行的 if err != nil 去解决这个硬逻辑,只有加个符号(相似语法糖)就行,由编译器和运行时本人去解决就完了。

这类提案都会被回绝

为什么最初 Go 没有落地呢?

广泛社区中参加探讨的大佬认为,新的语法糖相较 if err != nil,会减少认知和了解代码的开销,并升高代码可读性。

这些神奇的的性能和符号,他们是隐秘的,更容易让人错过,会导致程序控制流逻辑产生扭转。

Go 初学者也须要额定把握这几个符号的了解和利用,有新的学习老本。

这类提案会被间接回绝,不要再空想了。

心愿开发者本人定模板

如果只是为了解决那 3 行代码,局部大佬示意 Go 开发者应该本人定义谬误模板。

而不是借助引入更多的新语法来解决,这也不合乎 Go 语言对“less is more”的理念定义。

从当初对 Go 错误处理的多个提案探讨和社区交换来看,Go 在这块仿佛曾经陷入僵局,很像咱们极限工作中常提的既要也要还要,重要的是 ROI 也不够高。

让 Rust 个性留给 Rust。

总结

Go 错误处理 if err != nil 的解决,曾经成为了一块烫手的山芋,怎么改都不讨好了,相干负责人踊跃探讨,施行继续摆烂中。

依据以往在依赖治理的,我猜想最终大概率会由 Go 团队大当家 Russ Cox 操刀,否则很难有人能力挽狂澜。

错误处理的碰撞,真是 Go 的毕生之敌。

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

Go 图书系列

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

举荐浏览

  • 加大力度!Go 将会加强 Go1 向后兼容性
  • 打脸了兄弟们,Go1.20 arena 来了!
  • Go 十年了,终于想起要对立 log 库了!

正文完
 0