Go: два append к одному срезу и общий базовый массив
В данном коде происходит следующее:
Читать ответПодготовка к интервью
18 вопросов с ответами по теме «Слайсы и массивы в Go»
Что проверяют на интервью
Вопросы о различиях массива и слайса, выделении памяти и работе с общим базовым массивом. Практические примеры посвящены append, изменению слайса внутри функции, удалению элементов и конкурентному доступу.
Каталог
В данном коде происходит следующее:
Читать ответФункция sort.Ints из пакета sort в Go сортирует слайс целых чисел на месте (in-place). Это значит, что исходный слайс изменяется и после вызова функции его элементы будут упорядочены по возрастанию.
Читать ответВ Go срезы можно создавать разными способами, которые отличаются по инициализации и выделению памяти:
Читать ответВ Go map и slice служат для разных целей:
Читать ответВ текущей реализации функция ap не изменяет исходный слайс v, потому что операция append может создать новый слайс, а присвоение arr = append(arr, 10) меняет только локальную копию arr.
Читать ответПри конкурентном вызове append к одному и тому же срезу из 1000 горутин без синхронизации (например, без мьютекса) поведение будет неопределённым.
Читать ответВ Go слайс — это структура, которая содержит указатель на массив, длину (len) и ёмкость (capacity).
Читать ответДедупликация []int через map с сохранением порядка первых появлений: код, сложность и альтернативы при ограниченной памяти.
Читать ответРазбираем append для nums[2:] в Go: длину и ёмкость подсреза, выделение нового массива и влияние проигнорированного результата на исходный срез.
Читать ответКак в Go сократить число аллокаций при работе с рунами и слайсами? При работе со слайсами следует контролировать capacity, чтобы не допускать перераспределения памяти. Заранее задавайте capacity с помощью функции…
Читать ответРабота со слайсами (Go slices) Удаление элемента по индексу Для этого объединяют два подслайса: s = append(s[:i], s[i+1:]...) В результате формируется новый слайс без элемента с индексом i, а его длина уменьшается.…
Читать ответМассивы размещаются в непрерывной области памяти: их размер фиксирован, а элементы находятся последовательно Срез представляет собой структуру-обёртку, содержащую указатель на массив, длину и capacity Capacity — это…
Читать ответ