Por que a capacidade de fatia com números ímpares difere do comportamento com números pares
Percebi que a capacidade das fatias se comporta de maneira diferente, quando a capacidade é um número ímpar. Mais especificamente: quando um elemento é adicionado a uma fatia, a capacidade da fatia édobrou quando a capacidade original era um número par. Mas quando a capacidade original era um número ímpar, a capacidade éincrementado por um e depois dobrou. Exemplo:
s := make([]int, 28, 28)
s = append(s, 1)
fmt.Println("len=", len(s), " cap=", cap(s)) // len = len + 1, cap = 2 * cap
pri := make([]int, 27, 27)
pri = append(pri, 1)
fmt.Println("len=", len(pri), " cap=", cap(pri)) // len = len + 1, cap = 2 * (cap + 1)
Supondo que isso não seja um bug, qual é a razão desse comportamento?
Link para o playground:http://play.golang.org/p/wfmdobgCUF