Warum unterscheidet sich die Schnittkapazität mit ungeraden Zahlen vom Verhalten mit geraden Zahlen
Ich habe festgestellt, dass sich die Kapazität von Slices anders verhält, wenn die Kapazität eine ungerade Zahl ist. Genauer gesagt: Wenn einem Slice ein Element hinzugefügt wird, beträgt die Kapazität des Slice verdoppelt als die ursprüngliche Kapazität eine gerade Zahl war. Aber wenn die ursprüngliche Kapazität eine ungerade Zahl war, ist die Kapazität um eins erhöht und dann verdoppelt. Beispiel
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)
Angenommen, dies ist kein Fehler. Was ist der Grund für dieses Verhalten?
Link zum Spielplatz:http: //play.golang.org/p/wfmdobgCU