当前位置: 首页 > 后端技术 > PHP

Goerrorhandling-100+proposals全部被拒绝,为什么现阶段还用iferr!=nil?

时间:2023-03-29 16:51:28 PHP

大家好,我是炸鱼。这些年来,为Go提出新的错误处理建议的人络绎不绝,势不可挡。IanLanceTaylor作为历史的见证者之一,特意整理了一下《language: Go 2: error handling meta issue》。今天就根据自己写的内容分享给大家。如果以后有人再问,我可以转给他们,让他明白前因后果。背景2018年8月,现任Go核心团队负责人RussCox为Go2的错误处理绘制了一个大蓝图,并引入了一个未实现的设计草案。具体目标如下:希望Go的错误检查更加轻量级,可以减少被大家吐槽的程序文本量。整体来说,既要保证错误处理更方便,又不能增加复杂度。错误检查和错误处理都必须保持显式,这意味着在Go程序中可见。我们不想重复异常处理的陷阱。必须保证现有Go代码的兼容性,不能有破坏性的升级。之后也是因为Go的热浪,很多新的提案作为Go2错误处理的改变被提交,Gomail也有很多讨论,尝试了很多,但是至今没有一个被采纳。这就是现在Go错误处理的背景。错误处理合集当然,这个合集并不是100%全面的。如果你需要全部检查,你可以在go/issues库中搜索错误处理标签。以下是一组值得注意的错误处理建议:Go2检查/处理方法:主要原因之一:处理和延迟之间缺乏清晰度。相关文章:先睹为快,Go2错误的挣扎经常提到的try-catch方法:主要原因:额外的流控制,使用try的复杂表达式可能会导致函数返回。Go目前在表达式级别没有控制流结构(panic除外),这将引入额外的设计。相关文章:新的Gotry提案靠谱吗?我想简化错误处理,就像Rust使用!?作为错误检查:主要原因:!?比较晦涩难懂,会增加脑力负担,引起控制流程的变化。相关文章:为什么Go不使用Rust?!做错误处理?简化iferr!=nil{}减少代码量:主要原因:只是为了代码量,会导致语言的变化;它还会导致复杂性增加,因为它通常比较晦涩。此类提议通常会被拒绝。相关帖子:仅当err!=nil时才执行?不对,把这些优雅的搬运姿势分享给你!改用左手函数和表达式:主要原因:Go的设计哲学不推荐这种做法,这有点违背常见的代码阅读习惯,降低了代码的可读性。相关文章:Go错误处理的新思路?这些类型的函数和表达式通常在左侧使用。有很多类似的提案,或者理由相似被拒绝的提案,最终会在社区管理中一起指向并关闭。通过上述提案的前因后果,可以看出Go核心团队的一些benchmark。基本要素是:明确、简洁、无忧且易于使用。总结Go的“新”错误处理已经进行了3、5年了,很多社区朋友思考了很多,也提出了很多建议。error-handling标签下一共100+个proposal,无一幸免,全部被否决。这个阶段还是用iferr!=nil比较好,这个也是很多人认可的。或者可以在您自己的团队中封装一套共识标准。让风吹得久一点。文章持续更新中。可以微信搜索【脑补炸鱼】阅读。本文已收录在GitHubgithub.com/eddycjy/blog中。学习Go语言可以看Go学习地图和路线。欢迎星星提醒。Go书系列Go语言入门系列:初探Go项目实战Go语言编程之旅:深入使用Go做项目Go语言设计哲学:理解Go的Why与设计思维Go语言进阶之旅:进一步深入-深度Go源码推荐阅读Go1。20Arena可以手动管理内存,如何使用?Go会在新创输给Java,想不通。..2023年初写的后端社招面试心得(四年经验):字节跳动米哈游富途远道