Вот-вот. Вот это вот всё и вылетает из головы периодически. Опять залезаешь на go.dev в блог, опять листаешь, ругнёшься матом и пишешь дальше.
1. Создали слайс с len = cap = 10 2. По индексу записали 0...9, теперь массив под слайсом выглядит так: [0 1 2 3 4 5 6 7 8 9] 3. Взяли слайс s[0:1]: слайсинг сами данные не копирует, но возвращает новый слайс, у которого len = 1, cap = 10, а массив под капотом все тот же 4. append в s2 проверяет, больше ли len(slice) + len(newData), чем capacity слайса. В данном случае len(slice) + len(newData) = 2, что меньше cap(s2) = 10, поэтому будет переиспользован тот же самый массив. В результате значение 1 в нем будет перетерто на 666
Если len в п. 4 станет больше, произойдёт полное копирование массива?
Да, в этом случае будет создан массив размера 2X, куда будут скопированы старые + новые элементы. До порога в 1024 элемента массив будет увеличиваться вдвое, но после этой отметки только на 25%
Понял. Благодарю.
Посмотрите ещё такой пример: https://go.dev/play/p/6oJY_BKz6_S А потом поменяйте capacity слайса s при создании на 4. Будет, о чем подумать :)
а говриш не понимаешь
Ну вот зачем этот пример, только что же всё нормально было 😂 Пошёл думать.
Кажется, что реклама тут не приветствуется, да у меня и цели нет рекламной, но я себе завел канальчик, где вчера как раз этот кейс разбирал (оттуда и взял). Возможно, покажется полезным) https://t.me/letMyGophersGo/23
Обсуждают сегодня