On Mon, Feb 11, 2019 at 4:48 PM Slawomir Pryczek <[email protected]> wrote:
>
> When looking at this code below, you can see that the function will get LAST 
> value of i which is incremented inside the loop, but t is somehow copied and 
> taken inside a function so closure is created and it is bound to current 
> value of t, so we'll have its current value in function. This is strange as t 
> and i is defined on the same code block level (t will be discarded at the 
> same time as i, after the loop).
>
> I always thought that t would need to be passed explicitly to goroutine to 
> retain current value (which i did). But why assigning value in a loop is 
> treated differently in this regard than a straight assignment? Any URL where 
> such "special cases" are documented? Isn't it kind of design flaw, because 
> this seem very confusing that loop is creating single value and simple 
> assignment is creating multiple copies? Maybe you consider changing this in 
> go2?

A nested function that refers to a variable outside the closure is
always using a reference to that variable, never a copy.  So the only
question here is about the handling of variables in a loop.  The rule
is simply that a new variable is created at each variable declaration.
In the loop, there is one variable declaration of i when the loop
starts: i := 0.  The other references to i, including all the uses of
i within the loop, all refer to that single variable.  But the
declaration "t := i" is declared each time through the loop, so each
separate iteration of the loop has a different variable t.

So there is no special case here, and this is working as intended.
Hope this helps.

Ian

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

Reply via email to