1
resposta

A resposta é 16

Criei a função

func plainnigPoker() {
    pontosPlanningPoker := []int{1, 2, 3, 5, 8, 13, 21}
    fmt.Println(cap(pontosPlanningPoker))
    pontosPlanningPoker = append(pontosPlanningPoker, 40)
    fmt.Println(cap(pontosPlanningPoker))
}

Ao executar no terminal o resultado foi: 7 16

Acredito que faltou a alternativa 16

1 resposta

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!