I guess there is no way to get it accomplished. Non-local returns also 
don't work on the JVM. What the Kotlin guys were doing to work around it 
was to use inlining, see 
https://kotlinlang.org/docs/reference/inline-functions.html. In Scala if 
the Scala compiler sees a non-lucal return, in the generated byte code it 
wraps a try-catch block around it, assigns the return value to a variable, 
throws an exception and in the catch block returns what was previously 
stored in the variable. The approach in Kotlin is a little more elegant 
(but not transparent for the developer as the approach in Scala).

Now Go has no exceptions and no way to do inlining. So with the tricks that 
come to my mind, I see no way to get it accomplished. 

Am Freitag, 8. März 2019 14:02:31 UTC+1 schrieb whiteh...@googlemail.com:
>
> I'm really liking in Go that I can easily pass bits of code around, 
> 'closures'?  Apologies if I have terminology wrong, since I'm new here.
>
> For a typical asynchronous bit of code I like to pass in a 'func' for what 
> to do with the result, and also a 'func' to handle any errors.  
>
> I'm struggling to find a clean way to achieve a 'non-local return' i.e. 
> return from these closures and return the enclosing function too.
>
> https://play.golang.org/p/_ANPXKRzibq
>
> I had a look at the plan9 assembly stuff, and starting to suspect that 
> it's probably not possible?  
>
> So I'm wondering how readable my attempt is.  In Objective-C I would use 
> named parameters here of 'thenDo' and 'elseDo' to help the readability.  
> And I'm reluctant to try and duplicate that approach using a struct in Go.  
> But I suppose it's the dangling return that I least like...
>
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to