Это пример из GOPL - «выражения x [i] и x +« A »-« a »относятся к объявлению x из внешнего блока, мы объясним это в момент."go variable scope и shadowing
Объяснение никогда не приходит. Почему x [i] ссылается на x во внешней области? Как только вы обновите x во внутреннем блоке, он должен затенять x во внешнем блоке. Почему это работает?
package main
import "fmt"
func main() {
x := "hello!"
for i := 0; i < len(x); i++ {
x := x[i]
if x != '!' {
x := x + 'A' - 'a'
fmt.Printf("%c", x)
}
}
}
http://play.golang.org/p/NQxfkTeGzA
А так каждая итерация цикла является новой областью. http://stackoverflow.com/questions/7880658/what-is-the-scope-of-a-while-and-for-loop – VM7