Junior — Middle
Que alterações ocorrerão com o slice dentro da função se for passado por valor, e a função realiza uma ordenação e não retorna o resultado?
sobes.tech IA
Resposta da IA
Em Go, os slices são passados para funções por valor, mas é importante entender que o valor do slice é uma estrutura que contém um ponteiro para um array, um comprimento e uma capacidade. Ao passar um slice por valor, apenas essa estrutura é copiada, não o array de dados.
Se uma função ordena um slice passado por valor e não retorna o resultado, as alterações serão visíveis também fora, porque o ponteiro dentro do slice aponta para o mesmo array de dados.
Exemplo:
func sortSlice(s []int) {
sort.Ints(s) // ordena o slice
}
func main() {
nums := []int{3, 1, 2}
sortSlice(nums)
fmt.Println(nums) // Vai imprimir: [1 2 3]
}
Portanto, a ordenação dentro da função modificará o array original, mesmo que o slice seja passado por valor, porque apenas a estrutura do slice é copiada, não os dados do array.