Goでの変数のスコープについてはすでにあちこちで語られているとは思いますが、再確認。
以下のプログラムは i を何度も定義していますが動作します。
package main
import (
"log"
)
func main() {
log.SetFlags(log.Lshortfile)
i := 123
log.Println(i)
for i := 0; i < 3; i++ {
log.Println(i)
i := 9999
log.Println(i)
}
log.Println(i)
}
playground での結果
prog.go:11: 123
prog.go:13: 0
prog.go:15: 9999
prog.go:13: 1
prog.go:15: 9999
prog.go:13: 2
prog.go:15: 9999
prog.go:17: 123
こちらで解説されているものもほぼ同じですね。
https://dave.cheney.net/2016/12/15/declaration-scopes-in-go