Alterando o valor de um slice com for em Go

Um erro comum quando percorremos e alteramos valores de um slice num for é desconsiderar o fato que a variável dentro do for é local e por isso não altera seu valor após o for.

Vamos aos exemplos.

s := []int{1, 2, 3}
for i, n := range s {
	n += 1
	fmt.Println("Valor de n", i, "dentro do for:", n)
	fmt.Println("Valor da posição", i, "dentro do for:", s[i])
	fmt.Println()
}
fmt.Println("Valor do slice após o for:", s)

Output
Valor da posição 0 dentro do for: 2
Valor da posição 1 dentro do for: 3
Valor da posição 2 dentro do for: 4
Valor do slice após o for: [1 2 3]

Executando essa função, percorremos o slice e alteramos o valor de cada posição do slice.
Dentro do for o valor de n é alterado, mas é uma variável local e seu valor é desconsiderado na composição do slice ao sair do for.

s := []int{1, 2, 3}
for i, n := range s {
	s[i] += 1
	fmt.Println("Valor de n", i, "dentro do for:", n)
	fmt.Println("Valor da posição", i, "dentro do for:", s[i])
	fmt.Println()
}
fmt.Println("Valor do slice após o for:", s)

Output
Valor de n 0 dentro do for: 1
Valor da posição 0 dentro do for: 2

Valor de n 1 dentro do for: 2
Valor da posição 1 dentro do for: 3

Valor de n 2 dentro do for: 3
Valor da posição 2 dentro do for: 4

Valor do slice após o for: [2 3 4]

No exemplo acima, atribuimos os valores da soma em cada posição do slice. Dessa forma, registramos os novos valores e temos como resultado final o valor esperado.

Referências
https://yourbasic.org/golang/gotcha-change-value-range/