Olá, Roberta!
Entendo sua confusão, mas vamos esclarecer isso juntas.
A função cap
em Go retorna a capacidade atual do slice, que é o número total de elementos que o slice pode acomodar sem alocar mais memória. Quando você usa a função append
e a capacidade atual do slice é excedida, Go aloca mais memória para o slice. O interessante aqui é que Go não apenas aloca memória para o novo elemento, mas também adiciona algum espaço extra para acomodar futuros elementos, para evitar a alocação de memória a cada chamada de append
. Isso é feito para melhorar o desempenho.
No seu caso, o slice inicial tem uma capacidade de 7 (os elementos de 1 a 21). Quando você adiciona um novo elemento com append
, a capacidade do slice é excedida. Portanto, Go aloca mais memória para o slice. A nova capacidade não é necessariamente 8 (7 + 1), mas um número maior para acomodar futuros elementos. A quantidade de espaço extra alocada pode variar dependendo da implementação, e é por isso que você vê 16 como a nova capacidade.
No entanto, a resposta do exercício provavelmente está considerando uma implementação específica onde a capacidade dobra quando excedida. Então, de 7, ela se torna 14.
Espero ter ajudado e bons estudos!