В documenation состояния:Go: многократная перекраска, когда внутри цикла for создается новая переменная?
Как следствие, переопределение может появиться только в нескольких переменных короткой декларации. Redeclaration не вводит новую переменную; он просто присваивает новое значение оригиналу.
Но как это работает для циклов? See this example. Кажется, что переменная «nextPos», которая имеет область вне цикла, фактически получает переопределенную внутри цикла для внутренней области и, следовательно, теряет свое значение для каждой итерации. This версия работает.
Go имеет блочно-объем (в отличие, скажем, Javascript). Когда вы объявляете переменную, она объявляется внутри своего «окружающего блока». Поскольку вы можете иметь вложенные блоки, вы можете объявить переменную с тем же именем во внутреннем блоке, что и внешняя. Это называется затенением. – thwd