Можно ли использовать значение nil в качестве итерационного элемента для map в цикле?

В Go значение nil нельзя использовать как итерационный элемент для map в цикле, потому что range по map возвращает ключ и значение, а nil — это отсутствие значения.

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

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

В Go значение nil нельзя использовать как итерационный элемент для map в цикле, потому что range по map возвращает ключ и значение, а nil — это отсутствие значения.

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

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

В Go значение nil нельзя использовать как итерационный элемент для map в цикле, потому что range по map возвращает ключ и значение, а nil — это отсутствие значения.

Если значение в map является указателем или интерфейсом, то оно может быть nil, и это нормально. Но сам итератор не может быть nil.

Пример:

m := map[string]*int{
    "a": nil,
    "b": new(int),
}

for k, v := range m {
    if v == nil {
        fmt.Printf("ключ %s содержит nil значение\n", k)
    } else {
        fmt.Printf("ключ %s содержит значение %d\n", k, *v)
    }
}

Здесь v может быть nil, но сам цикл range по map работает корректно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее