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:
- 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.
- 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.