Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multi-variable short redeclaration when inside a for loop creates a new variable?

Tags:

go

The documenation states:

As a consequence, redeclaration can only appear in a multi-variable short declaration. Redeclaration does not introduce a new variable; it just assigns a new value to the original.

But how does this work in for loops? See this example. It seems that the variable "nextPos", which has a scope outside the loop, actually gets redeclared inside the loop for the inner scope, and thus looses its value for each iteration. This version works though.

like image 333
sebdehne Avatar asked Feb 11 '26 00:02

sebdehne


1 Answers

Let's show how it works, with these code samples:

Let's simplify your first sample, see this working sample code (1):

package main

import "fmt"

func main() {
    a := 100
    {
        fmt.Println(a) // 100
        a, b := 0, 0
        fmt.Println(a, b) // 0 0
    }
    fmt.Println(a) // 100
}

output:

100
0 0
100

so a in a, b := 0, 0 is shadowed, this a is new variable,
this is called Variable scoping and shadowing,
and you may name it e.g. c like this code for now to show how it works (2):

package main

import "fmt"

func main() {
    a := 100
    {
        fmt.Println(a) // 100
        c, b := 0, 0
        fmt.Println(c, b) // 0 0
    }
    fmt.Println(a) // 100
}

the output is that same as (1):

100
0 0
100

and lets simplify your next sample code (3):

package main

import "fmt"

func main() {
    a := 0
    b := byte(0)
    {
        fmt.Println(a, b) // 0 0
        a, b = 1, byte(1)
        fmt.Println(a, b) // 1 1
    }
    fmt.Println(a, b) // 1 1
}

output:

0 0
1 1
1 1

so here a and b are the same inside and outside loop.

also see: Where can we use Variable Scoping and Shadowing in Go?
and see: What is the difference between := and = in Go?


Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!