Junior — Middle
Que dados dentro do slice são passados ao chamar a função com este slice como argumento?
sobes.tech IA
Resposta da IA
Em Go, um slice é uma estrutura que contém três campos: um ponteiro para um array, um comprimento e uma capacidade. Quando um slice é passado para uma função, apenas essa estrutura é copiada, não todo o array de dados.
Ou seja, ao chamar uma função, o slice é passado por valor, mas apenas os metadados (ponteiro, comprimento, capacidade) são copiados, não os elementos do array em si. Isso significa que dentro da função, o slice aponta para o mesmo array base, e as alterações nos elementos do slice dentro da função serão visíveis fora.
Exemplo:
func modify(slice []int) {
slice[0] = 100 // altera o primeiro elemento
}
func main() {
s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // irá mostrar [100 2 3]
}
Assim, ao passar um slice para uma função, apenas os três campos da estrutura do slice são copiados, enquanto os dados do array permanecem compartilhados.