Что произойдёт при объявлении слайса без инициализации?

Инициализация не указана.

Короткий ответ

Что ответить на собеседовании

Инициализация не указана.

Подробный разбор

Ответ с пояснениями

Что произойдёт при объявлении слайса без инициализации?

  • В Go слайс представляет собой ссылку на массив
  • при отсутствии инициализации получается nil-слайс
  • для nil-слайса значения len и cap равны 0
  • append работает и при необходимости создаёт новый массив
  • nil безопасен для чтения, но обращение по индексу недопустимо
  • проверка слайса: слайс == nil → true
  • на практике пустой и nil-слайс часто ведут себя одинаково, хотя их внутреннее состояние различается

Итог: объявление слайса без инициализации создаёт nil-слайс с нулевыми длиной и ёмкостью. Его можно безопасно передавать в append и проверять на nil.

Развёрнутый ответ

Краткий ответ

В Go объявление слайса без начальной инициализации, например var s []int, приводит к тому, что переменная s содержит nil-слайс. Иными словами, переменная объявлена корректно, однако underlying массив отсутствует, а длина равна нулю; указатель во внутренней структуре имеет значение nil.

Основные особенности

  • Nil-слайс — это допустимый слайс, для которого len(s) == 0, cap(s) == 0, а сам слайс имеет значение nil. Выражение s == nil вернёт true.
  • Чтение элемента по индексу приведёт к runtime panic, поскольку индекс выходит за допустимый диапазон. При этом добавление элементов с помощью append выполняется штатно: слайс при необходимости будет автоматически инициализирован.
  • Пустой слайс, созданный литералом []int{}, отличается от nil-слайса тем, что nil-состояние явно указывает на отсутствие данных. Такое различие может использоваться для оптимизации и проверки факта инициализации.

Практическое применение

В прикладном коде функция нередко возвращает nil-слайс, если данных нет: это позволяет избежать ненужных аллокаций. Однако при реализации обработки следует учитывать отличие nil-слайса от пустого, особенно во время сериализации и сравнений. Например, при JSON-маршалинге nil-слайс преобразуется в null, тогда как пустой слайс — в []. Это важно для предсказуемого поведения API.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку