Hi Vojta, Can you please provide some real world examples (e.g. link to open source project) or a code style guideline that promotes the use of that pattern of using a goto? I don't believe that it is idiomatic Go. Personally, I can count on one hand the number of times I've seen the usage of goto in Go; be it 'in the wild' or otherwise.
I appriciate the leg work that you've done to get to this point, I can't honestly say I've reviewed the existing error handling proposals. I imagine it's a hot topic! I am not the gatekeeper of what is and is not idiomatic Go (I'm not sure anyone is!) But can't say I share your experience; when I read and write code in my workplace, a lot of the error handling involves logic specific to the call the produced the error (e.g. wrapping the error) or a simple naked return. I just don't see the value proposition at this time. Cheers, Corin On Wednesday, 16 February 2022 at 12:50:16 am UTC+11 bargl....@gmail.com wrote: > Hi, > my name is Vojta and I would like to join a error handling proposals > discussion and because I don't know what else to say I guess I will jump > right to it. > > I know everyone has his/her own opinion about this topic, which has its > pros and cons. > And even though I think current solution is well-done I found myself > smiling when I browse through my or someone else's source code because of > that very well known reoccurring pattern: > ``` > if err != nil { ... } > ``` > Do not get me wrong but I think it is pretty ironic when you see > reoccurring pattern in context where you try to minimize these into more > generalized form. > > I tried to read most issues on Github with error-handling label, but there > are just so many that in this point I am glad I found link to Error > Handling meta issue <https://github.com/golang/go/issues/40432> which > summarize all important issues about this topic. I would like to get your > opinion about solution that I did not find in this summarized list. > > I would like to get opinion of people that know little more about golang > itself and are able to provide "holes" in this solution. Feel free to point > them out, but please keep in mind that I may not be able to solve them > alone. Like I said, I just wanted to discuss this solution before I file > official issue proposal. > > Solution > I got inspired with golangs `:=` operator that handles declaration and > assignment of variable. It's basically two operations in one. So what about > using something similar, like `?=`, that would assign variables and > additionally check if last variable (if error) is not nil? > > What I'm talking about is replace these lines: > ``` > if value, err = ReturnValueAndErr(); err != nil { > goto Err > } > if otherValue, err = DeriveAnotherValueAndErr(value); err != nil { > goto Err > } > > Err: > // handle errors > ``` > > with these lines: > ``` > value, err ?= ReturnValueAndErr() > otherValue, err ?= DeriveAnotherValueAndErr(value) > > error: > // handle error > ``` > > It's very short and seems idiomatic to golang and it's main feature is it > does not break the flow of thought that author tried to express. Error > handling itself is already defined (and used) feature - labels and name of > label is intentionally already known keyword to get the link between ?= > operator and error handling. > > There are few limitations though: > > - variables needs to be declared before > (I mean not really, but idea is to access assigned variables in label. > so *value*, *otherValue* and *err* should be declared) > - label error must exists and serve only this purpose > (compiler option could change the name for backward compatibility) > > So what do you say? > Can you make it better? > > Cheers, > Vojta > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/be02eec5-34f6-429f-965f-30fe6b39893fn%40googlegroups.com.