Sobes.tech
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.