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.