Sobes.tech
Junior — Middle

O que acontece ao chamar o método append e por que ele retorna uma nova fatia?

sobes.tech IA

Resposta da IA

No Go, o método append é usado para adicionar elementos a um slice. Quando se chama append, o seguinte acontece:

  1. Se a capacidade (capacity) do slice for suficiente, o novo elemento é simplesmente adicionado ao array existente, e um slice apontando para a parte atualizada do array é retornado.
  2. Se a capacidade não for suficiente, um novo array com capacidade aumentada é criado, os elementos antigos são copiados para ele, e então o novo elemento é adicionado.

Por isso, append retorna um novo slice porque:

  • No caso de expansão de capacidade, um slice apontando para o novo array é retornado.
  • Quando há capacidade suficiente, um slice apontando para o mesmo array, mas com comprimento aumentado, é retornado.

É importante sempre atribuir o resultado de append de volta à variável, para não perder a referência ao slice atualizado:

s := []int{1, 2, 3}
s = append(s, 4)  // s agora aponta para um slice com os elementos [1 2 3 4]

Dessa forma, append retorna um novo slice porque internamente pode alterar o array base, e é necessário atualizar a referência a ele.