Senior
O que este código irá mostrar e por quê? ```go package main import "fmt" func main() { lst := []string{"a", "b", "c", "d"} for k, v := range lst { if k == 0 { lst = []string{"aa", "bb", "cc", "dd"} } fmt.Println(v) } } ```
sobes.tech IA
Resposta da IA
O código irá mostrar:
a
b
c
d
Por que:
Em Go, quando você usa for k, v := range lst, o slice lst é copiado por referência, mas o iterador funciona sobre o slice original, que existia no momento do início do ciclo. Alterar a variável lst dentro do ciclo não afeta a iteração.
Ou seja, ao entrar no ciclo, lst contém {"a", "b", "c", "d"}, e é sobre esse slice que a iteração ocorre. A reatribuição de lst dentro do ciclo não muda o conjunto de elementos pelos quais se percorre.
Se você quiser que as mudanças no slice afetem o ciclo, deve usar outra abordagem, por exemplo, um ciclo com índices ou reiniciar o ciclo.
Exemplo:
for i := 0; i < len(lst); i++ {
if i == 0 {
lst = []string{"aa", "bb", "cc", "dd"}
}
fmt.Println(lst[i])
}
Neste caso, a saída será diferente e pode causar pânico se o comprimento mudar.