Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Reserva de tamanho

Slices parecem se comportar de forma muito similar a std::vector do C++, que tem uma operação bastante interessante chamada reserve, que dá uma dica para o container de que teremos um tamanho X na maior parte do tempo - com isso, evitamos muitas alocações e dealocações (operações tipicamente custosas e que podem causar fragmentação no alocador de memória, além de piorar a cache-coherence).

Existe algum truque similar com slices?

1 resposta
solução!

Em Go, um slice contém um comprimento (length) e uma capacidade (capacity). O comprimento (length) de um slice é o número de elementos que ele contém.

A capacidade (capacity) de um slice é o número de elementos, contando desde o primeiro elemento do slice.

O length e a capacity de um slice podem ser obtidos usando as expressões len(s) e cap(s).

vals := make([]int, 5)

fmt.Println("Capacity was:", cap(vals))
for i := 0; i < 5; i++ {
  vals = append(vals, i)
  fmt.Println("Capacity is now:", cap(vals))
}

fmt.Println(vals)

Quando usamos "make([]int, 5)" estamos dizendo ao nosso programa que queremos criar um slice com um length de 5, e a capacidade é padronizada para o comprimento fornecido - 5 neste caso.