Получить доступ

Что такое нулевые значения в Go?

JuniorОсновы языка
Ещё спрашивают так:
  • Чему равна неинициализированная переменная в Go?
Коротко

Любая переменная без явной инициализации получает нулевое значение своего типа: 0 для чисел, "" для строк, false для bool, nil для указателей, срезов, мап, каналов, функций и интерфейсов; у структуры — нулевые значения всех полей.

  • Неинициализированных переменных в Go не бывает
  • Хороший тип делают полезным в нулевом состоянии: sync.Mutex, bytes.Buffer работают без конструктора
  • nil-срез можно читать и append; в nil-мапу писать нельзя — panic

А ещё Чтение из nil-мапы возвращает нулевое значение без паники

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

var n int        // 0
var s string     // ""
var p *User      // nil
var xs []int     // nil, len 0
var m map[string]int  // nil
var u User       // все поля нулевые

Принцип «полезного нулевого значения». В стандартной библиотеке многие типы готовы к работе сразу после объявления:

var mu sync.Mutex
mu.Lock()

var buf bytes.Buffer
buf.WriteString("ok")

Различия nil-типов:

  • nil-срез: len = 0, range ничего не делает, append работает;
  • nil-мапа: чтение даёт нулевое значение, запись — panic;
  • nil-канал: отправка и получение блокируются навсегда;
  • nil-указатель: обращение к полю — panic.

Что хотят услышать

  • Нулевые значения разных типов.
  • Идея полезного нулевого значения.
  • Поведение nil-срезов, мап и каналов.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем