https://github.com/golang/go/issues/33167

On Sunday, July 12, 2020 at 10:44:02 PM UTC+2 [email protected] 
wrote:

> On Sun, Jul 12, 2020 at 9:33 PM Bakul Shah <[email protected]> wrote:
>
>> On Jul 12, 2020, at 11:11 AM, Gert <[email protected]> wrote:
>> > 
>> > https://play.golang.org/p/6xMgjr1IyFD
>> > 
>> > var fn myHandler
>> > fn = func(w http.ResponseWriter, r *http.Request) {
>> >   fn.GET(w, r)
>> > }
>> > 
>> > Just wondering if it's possible somehow to write this in one line like 
>> so
>> > 
>> > var fn myHandler = func(w http.ResponseWriter, r *http.Request) {
>> >   fn.GET(w, r)
>> > }
>>
>> The issue is that fn's type can't be completely determined until
>> the RHS func is fully analyzed but for that to work fn must be
>> known!
>
>
> Why? ISTM the type is mentioned twice - once as "myHandler" on the LHS and 
> once in the signature on the RHS. And there isn't even a way to write down 
> a function literal without mentioning the full type. On the surface, this 
> seems like a relatively straightforward scoping issue, introduced by the 
> fact that the scope of a variable declaration starts at the end of it's 
> VarSpec, not the "=". Interestingly though, the initialization rules 
> prevent this from working at the package-level, where this scoping problem 
> doesn't exist: https://play.golang.org/p/IPMxtYETGsg
>
> Also note that the first definition won't do what you may be thinking
>> it does. The`fn.GET` call will be to the existing value of fn, not
>> the result of the assignment.
>>
>
> No, it won't. The function-literal closes over `fn`, so it will use 
> whatever is assigned at call-time.
> https://play.golang.org/p/VCvCt8J8Zcw
> I use this pattern all the time to define a recursive function without 
> polluting the package-scope.
>
>
>> -- 
>> 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 [email protected].
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/716C7D59-9F2B-4AAD-8560-79011359A96C%40iitbombay.org
>> .
>>
>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/acbc2cad-163d-461a-a546-5a8248d0c392n%40googlegroups.com.

Reply via email to