Как append() влияет на len и cap слайса (slice) в Go?
Как функция append()
влияет на длину (len
) и вместимость (cap
) слайса (slice) в гошке. Изменения cap
слайса (slice
) происходят нелинейно по отношению к количеству добавленных элементов. Почему изменяется cap
среза после каждого вызова append
?
Также возникает вопрос, можно ли этим как-нибудь управлять?
package main
import "fmt"
func main() {
// Создаем срез с начальной длиной 0 и вместимостью 3
slice := make([]int, 0, 3)
fmt.Printf("Initial len: %d, cap: %d\n", len(slice), cap(slice)) // len: 0, cap: 3
// Добавляем первый элемент в срез
slice = append(slice, 1)
fmt.Printf("After append 1: len: %d, cap: %d\n", len(slice), cap(slice)) // len: 1, cap: 3
// Добавляем второй элемент в срез
slice = append(slice, 2)
fmt.Printf("After append 2: len: %d, cap: %d\n", len(slice), cap(slice)) // len: 2, cap: 3
// Добавляем третий элемент в срез
slice = append(slice, 3)
fmt.Printf("After append 3: len: %d, cap: %d\n", len(slice), cap(slice)) // len: 3, cap: 3
// Добавляем четвертый элемент, что приводит к увеличению вместимости среза
slice = append(slice, 4)
// Здесь `cap` может удвоиться до 6, но точное значение может зависеть от реализации
fmt.Printf("After append 4: len: %d, cap: %d\n", len(slice), cap(slice)) // len: 4, cap: 6
}