Middle
Go'da bir dilim (slice) büyüdüğünde ve kapasite sınırına ulaştığında ne olur? Yeni öğeler eklenirken nasıl bir mantık işler?
sobes.tech yapay zeka
AI'dan gelen yanıt
Когда слайс в Go достигает своей текущей ёмкости (capacity) и в него пытаются добавить новый элемент через append, происходит перераспределение памяти:
- Создаётся новый массив с увеличенной ёмкостью. Обычно новая capacity примерно в 2 раза больше старой, но точный алгоритм зависит от реализации и размера слайса.
- Содержимое старого массива копируется в новый.
- Новый элемент добавляется в новый массив.
- Слайс начинает ссылаться на новый массив с обновлённой длиной и ёмкостью.
Это позволяет слайсам динамически расти, но при этом операция добавления может быть дорогостоящей, если происходит перераспределение.
Пример:
s := make([]int, 0, 2) // длина 0, capacity 2
s = append(s, 1, 2) // теперь длина 2, capacity 2
s = append(s, 3) // capacity увеличится, например, до 4
Таким образом, append автоматически управляет ростом слайса, скрывая детали перераспределения от разработчика.