Вопрос с собеседования · Go

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

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

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

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

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

Подробно

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-срезов, мап и каналов.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Неинициализированная переменная содержит мусор из памяти
  • ✗Нулевое значение строки и среза — nil, а структуры без инициализации тоже равны nil
  • ✗Структуры без инициализации равны nil
  • ✓Без инициализации — нулевое значение типа: 0, "", false, nil

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования