共计 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 库了!