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?