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