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