¿Por qué la capacidad de corte con números impares difiere del comportamiento con números pares?

Noté que la capacidad de las rebanadas se comporta de manera diferente, cuando la capacidad es un número impar. Más específicamente: cuando se agrega un elemento a un segmento, la capacidad del segmento esdoblado cuando la capacidad original era un número par. Pero cuando la capacidad original era un número impar, la capacidad esincrementado en uno y luego duplicado. Ejemplo:

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)  

Suponiendo que esto no es un error, ¿cuál es la razón de este comportamiento?

Enlace al patio de recreo:http://play.golang.org/p/wfmdobgCUF

Respuestas a la pregunta(1)

Su respuesta a la pregunta