В Go срезы можно создавать разными способами, которые отличаются по инициализации и выделению памяти:
Как отличить способы создания среза в Go с использованием var, make и присваивания по индексам или через append?
В Go срезы можно создавать разными способами, которые отличаются по инициализации и выделению памяти:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В Go срезы можно создавать разными способами, которые отличаются по инициализации и выделению памяти:
- Объявление с помощью
var— создаёт nil-срез, который не указывает на массив и имеет длину и ёмкость 0.
var s []int // nil-срез
- Создание среза через
make— выделяет массив заданной длины и ёмкости, возвращает срез, указывающий на этот массив.
s := make([]int, 5) // срез длины 5, заполнен нулями
- Присваивание по индексам — возможно только если срез уже инициализирован и имеет достаточную длину.
- Добавление элементов через
append— добавляет элементы в срез, при необходимости увеличивает ёмкость и выделяет новый массив.
s = append(s, 10) // добавляет элемент 10 в срез
Таким образом, var создаёт пустой nil-срез, make — срез с выделенной памятью, присваивание по индексам требует существующей длины, а append динамически расширяет срез.