Junior — Middle
Como é que se passa um slice para uma função numa linguagem de programação?
sobes.tech IA
Resposta da IA
Em Go, o slice é passado para uma função por valor, mas o slice contém um ponteiro para um array, bem como o seu comprimento e capacidade. Isso significa que, ao passar um slice para uma função, a estrutura do slice é copiada, mas os dados do array ao qual ele aponta não.
Por isso, as alterações nos elementos do slice dentro da função refletem-se no array original, mas alterar o próprio slice (por exemplo, atribuir-lhe um novo slice) não afeta o slice externo.
Exemplo:
package main
import "fmt"
func modifySlice(s []int) {
s[0] = 100 // altera o elemento do array original
s = append(s, 200) // altera o slice local, o externo não é afetado
}
func main() {
s := []int{1, 2, 3}
modifySlice(s)
fmt.Println(s) // Vai imprimir: [100 2 3]
}
Desta forma, o slice é passado por valor, mas graças ao ponteiro interno, as alterações nos elementos são visíveis fora da função.