Go Wiki: Go2ErrorHandlingFeedback
关于 Go 2 错误处理草案设计的反馈
此页面旨在收集和整理有关 Go 2 错误处理草案设计的反馈和讨论。
请在您的博客、Medium、GitHub Gists、邮件列表、Google Docs 等地方发布您的反馈。然后请在此处链接。
请帮助对底部未分类的提案进行分类。
更新,2019 年 6 月 19 日 – 基于这些反馈,我们发布了 关于 try 内建函数的提案,该提案在 #32437 上产生了大量反馈(此处为串联视图)。
我们已禁用该议题的评论,直到 7 月 1 日,以便大家有时间在自己的代码中进行试验。我们非常希望看到关于在您自己的代码中使用通用 try 方法的经验报告,包括使用 tryhard 进行的试用转换。谢谢!
关于 “try 提案” 的经验
添加到此列表
- 模板:您的姓名,“标题”,YYYY 年 MM 月
要求
关于新错误处理方法要求的讨论。
-
Warren Stephens,“Go 2 的
handle
应提供行号、源文件名、版本”,2018 年 12 月 -
Liam Breck,“Go 2 错误处理需要考虑的要求”,2018 年 9 月
-
jimmyfrasche,“不要特殊处理 error 或 nil”,2018 年 9 月
-
Matt Dee,“错误处理应支持自定义错误类型”,2018 年 8 月
-
Ian Lance Taylor,“不完整的标准列表” 来自 GitHub 提案讨论,2018 年 5 月
-
Rob Pike(由 @matjam 发布)“简单即是复杂”,2015 年 12 月
支持
这包括支持现有的 handler 链/堆叠,无任何改动。
-
Tokyo Gophers,“Go 2 反馈活动的支持意见”,2018 年 10 月
-
Adam Bouhenguel,“支持更声明式的错误处理”,2018 年 8 月
-
Daniel Theophanes,“Go 2 设计:错误处理净收益”,2018 年 8 月
-
Alexandru-Paul Copil,“支持,并附带少量修改和考虑”,2021 年 9 月
示例代码
已更改代码以使用现有提案。
-
Daniel Milde,“在 gdu 中使用 check-handle 草案语法”,2021 年 5 月
-
Mateusz Czapliński,“将一段实际代码的错误处理转换为 Go 2 “设计草案””,2018 年 8 月
-
Blake Mizerany,“在使用 check/handle 时如何最好地处理部分写入?”,2018 年 8 月
反对
不带反提案的批评
-
Pasha Osipyants,“使用当前 Go 可能性的错误处理机制”,2019 年 2 月
-
Anonymous,“Go 2 错误处理非提案”,2018 年 10 月
-
Stripe developers,“关于 Go 2 草案设计的反馈”,2018 年 10 月
-
Tokyo Gophers,“Go 2 反馈活动中的反对意见”,2018 年 10 月
-
Liam Breck,“Golang,你怎敢处理我的检查!”,2018 年 9 月
-
Nate Finch,“Handle 和 Check,算了吧”,2018 年 9 月
-
Jozef Slezak,“使用分号而不是新关键字:check+handle”,2018 年 9 月
-
Shannon Wynter,“错误处理的已有实现方式”,2018 年 8 月
重复的主题
在以下建议中反复出现的概念。
-
通过赋值调用 handler,例如
v, ? := f()
参考:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 -
按名称调用多个 handler 中的一个,例如
v := check f() ? name
参考:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
温和的修订
-
Leidong Liu,“a, b, !checkError := Sub(…)”,2019 年 11 月
-
Jin Feng,“[一个简化的 Go 2 错误处理方案,没有 handler] (https://gist.github.com/jfeng45/416d4ecb42a4df50bebf86ce1c41c668)”,2019 年 7 月
-
Dave Arnold,“将特殊的 check 关键字移到赋值的左侧”,2019 年 4 月
-
Rockmen,“添加 handle 和 ? 作为语法糖,或许”,2018 年 12 月
-
Steve Manuel,“Go 2 的
handle
语句可选择使用类型开关”,2018 年 10 月 -
Zlatko Bratkovic,“支持,并附带微小改动”,2018 年 10 月
-
DeedleFake,“解决
check
在链式方法调用时的尴尬”,2018 年 9 月 -
Yesuu Zhang,“传递 check 和 handle 参数,自定义 handle”,2018 年 9 月
-
Viktor Kojouharov,“减少新错误设计草案周围的特殊处理”,2018 年 9 月
-
Aleksei Pavliukov,“使用函数作为 handle 参数”,2018 年 9 月
-
Savino Pio Liguori,“Go2 错误处理设计的反馈”,2018 年 8 月
-
Jeffrey Koehler,“支持 Handler 链;关于 Check”,2018 年 8 月
-
Garrus,“另一种错误处理的语法糖风格”,2018 年 8 月
-
Paul Borman,“反对 Go 2 错误处理提案的论点”,2018 年 8 月
-
krhubert,“用于测试的错误默认 handler”,2019 年 5 月
-
Franz, 实现错误处理,就像一个变量的不变量检查。当值改变时,会调用一个函数。这也可以用于其他情况。
-
Brandon Heenan,“简洁,具有更明显的控制流”,2021 年 5 月
移除 handler 链
-
Markus Heukelom,“提案:使用
guard
和must
关键字改进错误处理”,2019 年 4 月 -
Alessandro Arzilli,“反对 check 作为运算符和 handler 链”,2018 年 8 月
-
Simon Howard,“Go 2 错误响应:每个函数一个 Handler”,2018 年 8 月
-
Eli Bendersky,“关于 Go 2 错误处理提案的思考”,2018 年 9 月
-
Yoshiki Shibukawa,“每个 handler 都应有一个 return 语句”,2018 年 9 月
反提案
使用普通函数的错误处理
-
Azamat Kalberdiev,“使用直观的代码处理每个错误”,2021 年 3 月
-
Andrew Phillips,“使用闭包而不是 handler”,2018 年 10 月
-
Taihei Morikuni,“使用函数作为错误 handler,添加语法糖以消除重复的 if 语句”,2018 年 9 月
-
Scott Pakin,“基于非局部返回的 Go 2 错误处理”,2018 年 9 月
-
Greg Weber,“使用函数和 error 返回值进行错误处理?”,2018 年 9 月。最初链接的 gist。
-
Gigi Sayfan,“Go 2 错误处理反馈 + 替代方案”,2018 年 9 月
-
Ruan Kunliang,“Go 2 的简单错误处理”,2018 年 8 月
-
Martin Rode,“返回的回归,Go 2 的错误处理”,2018 年 11 月
带标签的错误 handler
-
Joe Lapp,“仅限本地的 throw-catch 错误处理”,2021 年 10 月
-
Danijel Premus,“使用现有的 go 标签”,2018 年 12 月
-
Burak Serdar,“err 的 handler 同时声明 err 和 errHandler,减少侵入性的带标签错误处理”,2018 年 10 月
-
John Forstmeier,“带标签的错误处理”,2018 年 9 月
-
Mikaël Cluseau,“多个 handler,明确哪个返回值被使用”,2018 年 9 月
-
Kiura Magomadov,“对 Go2 草案错误处理的补充”,2018 年 9 月
-
Liam Breck,“
#id/catch
错误模型”,2018 年 9 月 -
Marlon Che,“如何分离 check 和 handle?”,2018 年 8 月
内联
-
Patrick Kelly,“在 Go 中处理不仅仅是错误”,2018 年 8 月
-
Vlad Didenko,“使用
grab | name()
进行错误处理”,2017 年 11 月 -
Gooid,“内联风格错误处理(简单无歧义)”,2018 年 8 月
使用 defer
-
Victoria Raymond,“强制 ‘check’ 返回 error 而不是允许自定义逻辑”,2018 年 8 月
-
Night-walker 和 daokoder,“扩展和重新利用 defer 而不是引入新语法”,2014 年 6 月
try/catch/finally 语法
-
Mathieu Devos,“Go2 错误处理提案:作用域 Check/Handle”,2018 年 8 月
-
Rust RFC,“基于 Trait 的异常处理(其中
catch
类似于try
)”,2016 年 2 月 -
ZhiFeng Hu,“[Go2ErrorHandling] Go 应支持异常处理程序”,2018 年 8 月
-
Jan Semmelink,“if-else-undo-done”,2018 年 8 月
-
Vladimir Utoplov,“处理 throws/throw 惯用法”,2018 年 9 月
-
Gokan EKINCI,“try-with-resources”,2018 年 12 月
其他可能性
-
Alex Hornbake,“refuse. 条件返回关键字”,2019 年 6 月
-
yaxinlx,“使用 ? 作为后缀来移除多值元组的最后一个错误值”,2019 年 3 月
-
Plamen Stoev,“Go 2 块级检查”,2018 年 11 月
-
Peter Goetz,“形式化和强制错误处理”,2017 年 9 月
-
Fedir RYKHTIK,“Go 2 的感叹号错误处理”,2018 年 9 月
-
Einthusan Vigneswaran,“错误感知关键字 - return, defer, if, != 并强制错误对象作为最后一个参数”,2018 年 9 月
-
Andrew Phillips,“改进 Go 错误处理”,2017 年 10 月
未分类
请帮助对剩余的提案进行分类。
-
Joe Lapp,“用于错误处理的
on...return
”,2021 年 10 月 -
Andrew Gwozdziewycz,“检查 Go 错误”,2019 年 6 月
-
DeedleFake,“关于 Go 2 设计草案的反馈”,2018 年 8 月
-
Loki Verloren,“Go 2 错误处理反馈及我关于如何提高程序员效率和体验的思考”,2018 年 9 月
-
Gima,“过程式代码,分离错误处理”,2018 年 6 月
添加您的反馈
请将所有条目格式化如下。
- 您的姓名,“标题”,月 年
为了更容易查看新的反馈,请将您的新提案添加到其所在部分的顶部。
此内容是 Go Wiki 的一部分。