Почему емкость с нечетными числами отличается от поведения с четными числами

Я заметил, что емкость срезов ведет себя по-другому, когда емкость является нечетным числом. Более конкретно: когда элемент добавляется в срез, емкость среза составляетдвойной когда первоначальная емкость была четным числом. Но когда исходная емкость была нечетным числом, емкостьувеличивается на единицу, а затем в два раза, Пример:

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)  

Предполагая, что это не ошибка, в чем причина такого поведения?

Ссылка на игровую площадку:http://play.golang.org/p/wfmdobgCUF

Ответы на вопрос(1)

Ваш ответ на вопрос