Sobes.tech
Junior — Middle

Ao passar uma cópia para uma função sem um ponteiro, isso afetará o array original?

sobes.tech IA

Resposta da IA

No Go, um slice é uma estrutura que contém um ponteiro para um array, um comprimento e uma capacidade. Quando você passa um slice para uma função sem um ponteiro, a estrutura do slice em si é copiada, mas o array subjacente não.

Isso significa que as alterações nos elementos do slice dentro da função afetarão o array original, pois ambos os slices apontam para o mesmo array. No entanto, se você alterar o próprio slice (por exemplo, atribuindo um novo slice ou mudando seu comprimento), essas alterações não afetarão o slice fora da função.

Exemplo:

func modifySlice(s []int) {
    s[0] = 100 // alterará o array original
    s = append(s, 200) // alterará o slice local, não afetando o externo
}

func main() {
    arr := []int{1, 2, 3}
    modifySlice(arr)
    fmt.Println(arr) // Irá imprimir [100 2 3]
}

Resumindo: passar um slice sem um ponteiro permite modificar os elementos do array original, mas não permite modificar o próprio slice (sua extensão, ponteiro) fora da função.