blob: 90f42275c5a5f1a1ff8db9f55a78ca6543289191 [file] [log] [blame] [view]
Liamde0e3042018-12-13 13:26:44 -08001# Feedback re Go 2 Error Handling Draft Design
Andrew Bonventrec0526c32018-08-28 09:55:58 -06002
3This page is meant to collect and organize feedback about the Go 2 [error handling draft design](https://go.googlesource.com/proposal/+/master/design/go2draft-error-handling-overview.md).
4
5Please post feedback on your blog, Medium, GitHub Gists, mailing lists, Google Docs, etc. And then please link it here.
6
Greg Weber003ae112018-09-04 11:44:23 -07007Please help categorize the rest of the uncategorized proposals at the bottom.
Greg Weberc240ea22018-09-04 11:17:32 -07008
Liam94dc4cc2018-09-23 17:52:29 -07009# Requirements
10
11Discussions of the requirements for a new error handling method.
12
Liam64210d12018-12-13 00:23:48 -080013- Warren Stephens, "[Go 2 `handle` should provide line number, source filename, version](https://github.com/warrenstephens/Go2ErrorHandlingFeedback)", December 2018
14
Liam94dc4cc2018-09-23 17:52:29 -070015- Liam Breck, “[Requirements to Consider for Go 2 Error Handling](https://gist.github.com/networkimprov/961c9caa2631ad3b95413f7d44a2c98a)”, September 2018
16
Liame1fea7f2018-12-14 05:54:22 -080017 - jimmyfrasche, "[Don't special case error or nil](https://gist.github.com/jimmyfrasche/f2cd6aff16db5e46c577da44ec0cfa72)", September 2018
18
19- Matt Dee "[Error Handling Should Support Custom Error Types](https://gist.github.com/mattdee123/a04f95ef5639489668cafd9c3b675a8c)", August 2018
20
Liam94dc4cc2018-09-23 17:52:29 -070021- Ian Lance Taylor, “[Incomplete list of criteria](https://github.com/golang/go/issues/21161#issuecomment-389380686)” from GitHub proposal discussion, May 2018
Greg Weberc240ea22018-09-04 11:17:32 -070022
Liamd3208ce2018-10-23 14:27:25 -070023- Rob Pike (posted by @matjam) “[Simplicity is Complicated](https://www.youtube.com/watch?v=rFejpH_tAHM)”, December 2015
Liam4a207c82018-10-09 17:14:46 -070024
Liamde0e3042018-12-13 13:26:44 -080025
Greg Weberca446d72018-09-04 11:46:26 -070026# In support
27
28This includes supporting the existing chaining/stacking of handlers without changes.
Greg Weber003ae112018-09-04 11:44:23 -070029
Steve Manuel0b87ceb2018-10-24 20:05:55 -060030 - Tokyo Gophers, "[In support comments from Go 2 feedback event](https://docs.google.com/document/d/1yTDMP0E9hlJyLnKyr-6XL84RogiiwDnk0fMg9HDOKkc/edit#heading=h.f7ryl4573bu9)", October 2018
31
Greg Weber003ae112018-09-04 11:44:23 -070032 - Adam Bouhenguel "[In support of more declarative error handling](https://gist.github.com/ajbouh/716f8daba40199fe4d4d702704f3dfcc)", August 2018
33
34 - Daniel Theophanes, "[Go 2 Design: Error Handling Net Win](https://docs.google.com/document/d/e/2PACX-1vSq487dLylRHjgtKV42EbTKHW1aHZaaso3MZ4HOG1OS-s8suOnR9WZz6ahzH4Kufs2vwKKDMhoj1_I6/pub)", August 2018
35
Liamde0e3042018-12-13 13:26:44 -080036## Example code
Greg Weberfa0c36b2018-09-04 11:51:06 -070037
38Code changed to use the existing proposal.
39
40- Mateusz Czapliński, "[Converting a fragment of real code with error handling to Go 2 'design draft'](https://gist.github.com/akavel/62d90bdc43088574c638eb3b16301a92)", August 2018
41
Liamda33a7f2018-09-22 08:14:45 -070042 - Blake Mizerany, “[How best to account for partial writes when using check/handle?](https://gist.github.com/bmizerany/fcd0348bda96edce05a4fc7426e47751)”, August 2018
43
Greg Weber003ae112018-09-04 11:44:23 -070044# Against
45
Liam3dc10292018-09-08 14:04:29 -070046Critiques without counter-proposals
Greg Weberca446d72018-09-04 11:46:26 -070047
Liamb028c882019-03-04 00:07:08 -080048- Pasha Osipyants, “[Error handling mechanism using current go possibilities](https://godoc.org/github.com/pashaosipyants/errors)”, February 2019
49
Liamcaa246b2018-11-01 11:29:43 -070050- Anonymous, “[Go 2 Error Handling Non-Proposal](https://groups.google.com/d/topic/golang-nuts/1McP4_-oOpo/discussion)”, October 2018
51
Liama333cc22018-10-20 10:28:43 -070052- Stripe developers, “[Feedback on Go 2 draft designs](https://groups.google.com/d/msg/golang-nuts/3A_MpcNKg7k/DWiHBLArCAAJ)”, October 2018
53
Yoshi Yamaguchif907df22018-10-18 11:40:45 +090054- Tokyo Gophers, "[Against comments from Go 2 feedback event](https://docs.google.com/document/d/1yTDMP0E9hlJyLnKyr-6XL84RogiiwDnk0fMg9HDOKkc/edit#heading=h.fy8rnze9tll5)", Oct 2018
55
Liam3dc10292018-09-08 14:04:29 -070056- Liam Breck, “[Golang, How dare you handle my checks!](https://medium.com/@mnmnotmail/golang-how-dare-you-handle-my-checks-d5485f991289)”, September 2018
Greg Weberca446d72018-09-04 11:46:26 -070057
Nate Finch789f0ea2018-09-10 16:05:38 -040058- Nate Finch, "[Handle and Check, Let's Not](https://npf.io/2018/09/check-and-handle/)", September 2018
59
Liam9ef50db2018-12-13 00:04:37 -080060- Jozef Slezak, "[Use semicolons instead of new keywords: check+handle](https://gist.github.com/jozef-slezak/93a7d9d3d18d3fce3f8c3990c031f8d0)", September 2018
61
Andrew W. Phillipsb84ccd42018-09-13 20:21:24 +100062- Shannon Wynter "[Error Handling as it can already be done](https://gist.github.com/freman/0b372e46c72f6a27652538b9930ee851)", August 2018
63
Liamde0e3042018-12-13 13:26:44 -080064
Liamda606432019-01-28 11:29:30 -080065# Recurring themes
66
67Concepts that appear repeatedly among the suggestions below.
68
69- Invoke handler via assignment, e.g. `v, ? := f()`
70 references:
71 [1](https://gist.github.com/oktalz/f04f36a3c2f61af22c7a6e06095d18eb),
72 [2](https://gist.github.com/pborman/c69e79690d86dfc5c371f096be22930c),
73 [3](https://github.com/rockmenjack/go-2-proposals/blob/master/error_handling.md),
74 [4](https://gist.github.com/the-gigi/3c1acfc521d7991309eec140f40ccc2b),
75 [5](https://gist.github.com/8lall0/cb43e1fa4aae42bc709b138bda02284e),
76 [6](https://gist.github.com/dpremus/3b141157e7e47418ca6ccb1fc0210fc7),
77 [7](https://gist.github.com/bserdar/4c728f85ca30de25a433e84ad5a065a1),
78 [8](https://gist.github.com/mcluseau/1c20c3973fa3acb544d0505637be8d67),
79 [9](https://didenko.github.io/grab/grab_worth_it_0.1.1.html),
80 [10](https://github.com/gooid/gonotes/blob/master/inline_style_error_handle.md),
81 [11](https://gist.github.com/Kiura/4826db047e22b7720d378ac9ac642027),
82 [12](https://github.com/golang/go/issues/27519)
83
84- Invoke one of several handlers by name, e.g. `v, ?name := f()`
85 references:
86 [1](https://didenko.github.io/grab/grab_worth_it_0.1.1.html),
87 [2](https://gist.github.com/forstmeier/b6c6a6d2f6f2f72a81a076322959c959),
88 [3](https://gist.github.com/mcluseau/1c20c3973fa3acb544d0505637be8d67),
89 [4](https://gist.github.com/the-gigi/3c1acfc521d7991309eec140f40ccc2b),
90 [5](https://gist.github.com/PeterRK/4f59579c1162cdbc28086f6b5f7b4fa2),
91 [6](https://gist.github.com/marlonche/4e5d4e5aec0555958ec1f181991325f6),
92 [7](https://github.com/alnkapa/Go2ErrorHandlingFeedback/blob/master/README.md),
93 [8](https://medium.com/@phlatphrog/handling-more-than-just-errors-in-go-f97c5aa2eac4),
94 [9](https://gist.github.com/gregwebs/02479eeef8082cd199d9e6461cd1dab3),
95 [10](https://github.com/gooid/gonotes/blob/master/inline_style_error_handle.md),
96 [11](https://gist.github.com/spakin/86ea86ca48aefc78b672636914f4fc23),
97 [12](https://gist.github.com/morikuni/bbe4b2b0384507b42e6a79d4eca5fc61),
98 [13](http://devmethodologies.blogspot.com/2018/10/go-error-handling-using-closures.html),
99 [14](https://gist.github.com/bserdar/4c728f85ca30de25a433e84ad5a065a1),
100 [15](https://medium.com/@marode/the-return-of-the-return-278b8ae261ab),
101 [16](https://gist.github.com/dpremus/3b141157e7e47418ca6ccb1fc0210fc7),
102 [17](https://github.com/golang/go/issues/27519)
103
104
Liamf5c3dc22018-12-13 13:38:21 -0800105# Modest revisions
Liam14461202018-12-12 12:51:19 -0800106
yaxinlx6d73ec52019-03-01 14:37:09 -0400107
108 - yaxinlx, "[Use ? as suffixes of multi-value tuples to remove the last error value from multi-value tuples](https://gist.github.com/yaxinlx/1e013fec0e3c2469f97074dbf5d2e2c0)", March 2019
109
rockmenjack9a841352018-12-28 15:57:28 +0800110 - Rockmen, "[Add handle and ? as syntax sugar maybe](https://github.com/rockmenjack/go-2-proposals/blob/master/error_handling.md)", December 2018
111
Liamb5c807d2018-12-12 13:05:47 -0800112 - Steve Manuel, "[Go 2 `handle` statement to optionally use a type switch](https://github.com/golang/go/issues/28344)", October 2018
113
114- Zlatko Bratkovic, "[In support with tiny change](https://gist.github.com/oktalz/f04f36a3c2f61af22c7a6e06095d18eb)", October 2018
115
116- DeedleFake, "[Possible Solution to `check` Awkwardness with Chained Method Calls](https://gist.github.com/DeedleFake/5e8e9e39203dff4839793981f79123aa)", September 2018
117
Liam59d56062018-12-13 12:47:36 -0800118- Yesuu Zhang, "[Pass the check and handle parameters, custom handle](https://github.com/yesuu/go-proposal/blob/master/go2errorhanding.md)", September 2018
119
Liam6040a1b2018-12-17 01:42:50 -0800120 - Viktor Kojouharov, "[Reducing the special casing around the new error design draft](https://gist.github.com/urandom/6519990ef9eb7547e888a5f2da7f1a93)", September 2018
121
Liam48cde832018-12-17 01:56:49 -0800122- Aleksei Pavliukov, “[Use a function as a handle parameter](https://github.com/a5i/go-proposal/blob/master/use%20a%20function%20as%20a%20handle%20parameter.md)”, September 2018
123
Liam573e3c12018-12-28 13:15:15 -0800124- Savino Pio Liguori, "[Feedback for Go2 error handling design](https://gist.github.com/8lall0/cb43e1fa4aae42bc709b138bda02284e)", August 2018
125
Liamb34ba0b2018-12-28 13:57:09 -0800126 - Jeffrey Koehler, "[In support of Handle Chaining; On Check](https://gist.github.com/deef0000dragon1/eb224ce4918d4ec3bdbaedf83a32aeb1)", August 2018
127
Liamcd0cb8c2018-12-24 18:38:49 -0800128 - Garrus, "[Another style of syntactic sugar on error handling](https://gist.github.com/garrus/5b1f73a7640726c92273700eabed9056)", August 2018
129
Liam274a4ca2018-12-12 15:44:59 -0800130 - Paul Borman, "[Arguments against the Go 2 error handling proposal](https://gist.github.com/pborman/c69e79690d86dfc5c371f096be22930c)", August 2018
131
Liamf5c3dc22018-12-13 13:38:21 -0800132## Remove handler chaining
Liam267ace32018-12-13 00:33:04 -0800133
134 - Alessandro Arzilli, “[Against check as an operator and handler chains](https://gist.github.com/aarzilli/1a85db632edecc8159505e2c785882ed)”, August 2018
135
136- Simon Howard, “[Go 2 errors response: One Handler Per Function](https://gist.github.com/fragglet/df6c5471771d87b2ad597d2efc57cb3e)”, August 2018
137
138- Eli Bendersky, "[Thoughts on the Go 2 Error Handling proposal](https://gist.github.com/eliben/d0c872054864bfc1110ec761c3c53c47)", September 2018
139
140- Yoshiki Shibukawa, "[Every handles should have return statement](https://gist.github.com/shibukawa/42a9dee400c2f8577b4a763bcb1a5e5f)", September 2018
141
142
Greg Weber003ae112018-09-04 11:44:23 -0700143# Counter-proposals
144
Greg Weberc240ea22018-09-04 11:17:32 -0700145## Error handling with normal functions
morikuni2b3ff322018-09-29 13:18:59 +0900146
Andrew W. Phillips23167502018-10-02 16:10:42 +1000147- Andrew Phillips, “[Use closures rather than handlers](http://devmethodologies.blogspot.com/2018/10/go-error-handling-using-closures.html)”, October 2018
148
Liam6040a1b2018-12-17 01:42:50 -0800149 - Taihei Morikuni, "[Use functions as an error handler, Add syntactic sugar to remove duplicated if statement](https://gist.github.com/morikuni/bbe4b2b0384507b42e6a79d4eca5fc61)", September 2018
Greg Weberc240ea22018-09-04 11:17:32 -0700150
Scott Pakin90e78162018-09-13 10:02:23 -0600151- Scott Pakin, "[Go 2 error handling based on non-local returns](https://gist.github.com/spakin/86ea86ca48aefc78b672636914f4fc23)", September 2018
152
Greg Weberd5bf64d2018-09-10 04:57:01 -0700153- Greg Weber "[Error handling with functions and an error return?](https://github.com/golang/go/issues/27567)", September 2018. Originally linked [gist](https://gist.github.com/gregwebs/02479eeef8082cd199d9e6461cd1dab3).
Greg Weberc240ea22018-09-04 11:17:32 -0700154
155- Gigi Sayfan, “[Go 2 error handling feedback + alternative solution](https://gist.github.com/the-gigi/3c1acfc521d7991309eec140f40ccc2b)", September 2018
156
阮坤良354a4d22018-09-05 17:43:42 +0800157- Ruan Kunliang, "[Simple Error Handling for Go 2](https://gist.github.com/PeterRK/4f59579c1162cdbc28086f6b5f7b4fa2)", August 2018
Greg Weberc240ea22018-09-04 11:17:32 -0700158
Martin Rode87ecab52018-11-30 18:08:55 +0100159- Martin Rode, "[The return of the return, Error Handling for Go 2](https://medium.com/@marode/the-return-of-the-return-278b8ae261ab)", November 2018
Martin Rode72192a42018-11-30 18:08:12 +0100160
Greg Weberc240ea22018-09-04 11:17:32 -0700161## Labeled error handlers
162
Liam4cc437a2018-12-03 21:46:43 -0800163- Danijel Premus, "[Use existing go labels](https://gist.github.com/dpremus/3b141157e7e47418ca6ccb1fc0210fc7)", December 2018
164
Burak Serdar17c165f2018-10-22 12:53:06 -0600165- Burak Serdar, "[Handler for err declares both err and errHandler, less intrusive labeled error handling](https://gist.github.com/bserdar/4c728f85ca30de25a433e84ad5a065a1)", October 2018
166
Greg Weberc240ea22018-09-04 11:17:32 -0700167- John Forstmeier, "[Labeled error handling](https://gist.github.com/forstmeier/b6c6a6d2f6f2f72a81a076322959c959)", September 2018
168
169- Mikaël Cluseau, "[Multiple handlers, unambiguous on which return value is used](https://gist.github.com/mcluseau/1c20c3973fa3acb544d0505637be8d67)", September 2018
170
Liamd1efaf82018-12-21 22:27:06 -0800171- Kiura Magomadov, “[Addition to Go2 draft error handling](https://gist.github.com/Kiura/4826db047e22b7720d378ac9ac642027)", September 2018
172
Liam92969482018-09-08 14:12:14 -0700173- Liam Breck, “[The `#id/catch` Error Model](https://github.com/golang/go/issues/27519)”, September 2018
Greg Weberc240ea22018-09-04 11:17:32 -0700174
Liam4fb43ce2018-12-24 22:16:44 -0800175- Marlon Che, "[How about separating check and handle?](https://gist.github.com/marlonche/4e5d4e5aec0555958ec1f181991325f6)", August 2018
176
Greg Weberc240ea22018-09-04 11:17:32 -0700177## Inlining
178
Liam1af36682018-12-13 00:50:41 -0800179- Patrick Kelly, "[handling more than just errors in go](https://medium.com/@phlatphrog/handling-more-than-just-errors-in-go-f97c5aa2eac4)", August 2018
180
Greg Weberc240ea22018-09-04 11:17:32 -0700181- Vlad Didenko, “[Error Handling with `grab | name()`](https://didenko.github.io/grab/grab_worth_it_0.1.1.html)”, November 2017
182
Greg Weber5e3dea22018-09-04 11:38:31 -0700183- Gooid, “[Inline style error handle(simple unambiguous)](https://github.com/gooid/gonotes/blob/master/inline_style_error_handle.md)”, August 2018
184
Greg Weber5e3dea22018-09-04 11:38:31 -0700185## Use defer
186
187 - Victoria Raymond, “[Force 'check' to return error instead of allowing customized logic](https://gist.github.com/VictoriaRaymond/d70663a6ec6cdc59816b8806dccf7826)”, August 2018
188
189 - Night-walker and daokoder, "[Extend and repurpose defer instead of introducing new syntax](https://github.com/daokoder/dao/issues/191#issuecomment-44784919 )", June 2014
190
Greg Weber003ae112018-09-04 11:44:23 -0700191## try/catch/finally syntax
192
Liamc272bba2018-12-10 22:25:39 -0800193- Rust RFC, “[Trait-Based Exception Handling (wherein `catch` is akin to `try`)](https://github.com/rust-lang/rfcs/blob/master/text/0243-trait-based-exception-handling.md)”, February 2016
194
Liamda33a7f2018-09-22 08:14:45 -0700195- ZhiFeng Hu, "[[Go2ErrorHandling] Go should support Exception handler](https://www.netroby.com/view/3910)", August 2018
196
Greg Weber003ae112018-09-04 11:44:23 -0700197- Jan Semmelink, “[if-else-undo-done](https://gist.github.com/jansemmelink/235228a0fb56d0eeba8085ab5f8178f3)”, August 2018
Greg Weber5e3dea22018-09-04 11:38:31 -0700198
Vladimir9935ba02018-09-30 21:35:42 +0300199- Vladimir Utoplov, "[Handling throws/throw idiom](https://gist.github.com/trashgenerator/d58e05522d2f83709e1a601564b68fee)", September 2018
200
Gokan EKINCI3c865842018-12-06 17:15:08 +0100201- Gokan EKINCI, "[try-with-resources](https://gist.github.com/eau-de-la-seine/9e2e74d6369aef4a76aa50976e34de6d)", December 2018
Gokan EKINCI4380d4c2018-12-06 16:04:43 +0100202
Liamde0e3042018-12-13 13:26:44 -0800203## Other possibilities
Andrew Bonventrec0526c32018-08-28 09:55:58 -0600204
Liam5f807752018-12-13 12:18:17 -0800205- Plamen Stoev, "[Go 2 block-level checks](https://gist.github.com/coquebg/afe44e410f883a313dc849da3e1ff34c)", November 2018
gimaaa5ad482018-10-10 15:00:55 +0300206
Liamf66a1592018-12-13 12:26:50 -0800207- Peter Goetz, "[Formalize and Enforce Error Handling](https://medium.com/@peter.gtz/thinking-about-new-ways-of-error-handling-in-go-2-e56d116952f1)", September 2017
208
Fedir RYKHTIKe8f7bb72018-09-12 19:25:34 +0200209 - Fedir RYKHTIK, "[Go 2 error handling with exclamation mark](https://gist.github.com/fedir/50158bc351b43378b829948290102470)", September 2018
210
Einthusan Vigneswarane594fd92018-08-31 19:10:01 -0400211 - Einthusan Vigneswaran, “[Error Aware Keywords - return, defer, if, != and forcing the error object to be the last argument](https://gist.github.com/einthusan/24e18f6359a31b3537815284cde0f6de)”, September 2018
Einthusan Vigneswarand1423562018-08-31 18:54:45 -0400212
Liam72eb83f2018-12-12 23:52:24 -0800213- Andrew Phillips, “[Improving Go Error Handling](http://devmethodologies.blogspot.com/2017/10/improving-go-error-handling.html)”, October 2017
214
Liamde0e3042018-12-13 13:26:44 -0800215
Liam5f807752018-12-13 12:18:17 -0800216# Uncategorized
K. Alex Millsd305d0a2018-09-02 10:30:01 -0500217
Greg Weberc240ea22018-09-04 11:17:32 -0700218Please help categorize the rest of the proposals here.
K. Alex Millsd305d0a2018-09-02 10:30:01 -0500219
DeedleFake73906fd2018-08-29 02:04:27 -0400220- DeedleFake, "[Feedback for Go 2 Design Drafts](https://deedlefake.com/2018/08/feedback-for-go-2-design-drafts/)", August 2018
Mateusz Czapliński91134a92018-08-29 12:36:50 +0000221
Liam5f807752018-12-13 12:18:17 -0800222- Loki Verloren, “[Go 2 error handling feedback and my thoughts on how to improve programmer's efficiency and experience](https://gist.github.com/l0k1verloren/8aec03b8c48fdb5d3dab3a77153ce162)”, September 2018
223
224- Gima, "[Procedural code, separate error handling](https://gitlab.com/snippets/1726097)", June 2018
225
Liamf5c3dc22018-12-13 13:38:21 -0800226## Adding your feedback
K. Alex Mills2ade4522018-09-02 15:28:01 -0500227
228Please format all entries as below.
229
Liamf4d4e2c2018-08-31 01:32:52 -0700230- _Your Name_, “[_Title_](#URL)”, _month year_
231
DeedleFake786866a2018-09-21 18:41:56 -0400232To make it easier to see new feedback, please add your new proposal to the top of the section it is placed in.