I don’t disagree. It is used in C because they don’t have exceptions so you 
need centralized handling.  Go can be viewed as similar in that respect - but 
with some extra limitations and additions. 

> On Feb 16, 2022, at 4:53 PM, 'Axel Wagner' via golang-nuts 
> <golang-nuts@googlegroups.com> wrote:
> 
> 
> This is golang-nuts, though. Not C-nuts. Go's goto statement is significantly 
> different from C's (see Ian's earlier response). And using it for error 
> handling in this manner is extremely uncommon.
> 
>> On Wed, Feb 16, 2022 at 11:12 PM Robert Engels <reng...@ix.netcom.com> wrote:
>> Using goto for error handling in C is very common. See the Linux kernel. 
>> 
>>>> On Feb 16, 2022, at 3:07 PM, Corin Lawson <corin.law...@gmail.com> wrote:
>>>> 
>>> 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 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.
>> 
>> -- 
>> 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/14F50F22-CC7A-41B9-9D10-F2A664F6C85B%40ix.netcom.com.
> 
> -- 
> 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/CAEkBMfHHkcx_b%3DJhrbR6DORpUjuDUvJb1xdRTa3jJ2DXj%3DE7jA%40mail.gmail.com.

-- 
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/F7D599FF-FD3B-4209-9824-BC394B3D6C35%40ix.netcom.com.

Reply via email to