Здравствуйте.
Разбираюсь в Golang потихоньку, дошел до слайсов. В частности, до того как их "мержить" (складывать). Проверяю пример про мерженье двух слайсов, все работает, суть я понимаю. Но вопрос такой: почему при создании слайса капасити не равна длине? Почему она больше и как Golang это подбирает? У меня два слайса, оба по длине = 5, а капасити им выставляется = 8. Я ставил длину = 3 (1,2,3), капасити было = 4. Я ставил длину = 10, капасити = 12.
У меня была идея, что капасити выставляется от степени 2, но понимаю что нет. Как она подбирется?
package main
import "fmt"
func main() {
var buf []int // buf = первый слайс
var new []int // new = второй слайс
buf = append(buf, 1,2,3,4,5) // buf = 1,2,3,4,5 (len=5, cap=8)
new = append(new, 10,20,30,40,50) // new = 10,20,30,40,50 (len-5, cap=8)
fmt.Println("Длина:",len(buf), "Капасити:", cap(buf), "Buf:", buf)
fmt.Println("Длина:",len(new), "Капасити:", cap(new), "Buf:", new)
// buf = buf + new
buf = append(buf, new...) // buf = buf + new
fmt.Println("Длина:",len(buf), "Капасити:", cap(buf), "Buf:", buf)
// buf = [1 2 3 4 5 10 20 30 40 50] (len=10, cap=16)
}
Спасибо.