Рост емкости в Go
Когда места в конце не хватает, добавление заводит новый, более длинный кусок. Точное новое значение емкости заранее не фиксируют: оно становится больше прежнего. Посмотрим длину и емкость до и после серии добавлений в маленький срез.
Создадим срез с длиной 0 и емкостью 2, добавим три числа и после каждого шага выведем len и cap:
nums := make([]int, 0, 2)
fmt.Println(len(nums), cap(nums))
nums = append(nums, 10)
fmt.Println(len(nums), cap(nums))
nums = append(nums, 20)
fmt.Println(len(nums), cap(nums))
nums = append(nums, 30)
fmt.Println(len(nums), cap(nums))
Сначала 0 и 2. После третьего добавления длина 3, а емкость уже больше 2: язык выделил новый массив. Точное число емкости на экране может отличаться, но оно растет.
Создайте через make срез с нулевой длиной и емкостью один в tiny, дважды добавьте числа и выведите емкость до второго и после второго добавления.
Добавляйте числа в срез, пока длина не станет больше начальной емкости, и выведите новую емкость.
Скажите, остается ли прежний массив тем же после роста емкости при добавлении.