🔴 Сложный · 3 очк. Map
Безопасно ли удалять ключи из map внутри for range?
A Нет, будет panic
B Нет, неопределённое поведение
C Да, спецификация Go это разрешает
D Только через буферный слайс ключей
Объяснение вопроса

Да. Спецификация Go явно разрешает удалять ключи из map во время итерации по ней в for range. Удалённый ключ не будет посещён, если итерация до него ещё не дошла. Добавление новых ключей во время итерации тоже допустимо, но они могут быть посещены в этом проходе, а могут и нет - полагаться на это не следует.

m := map[string]int{"a": 1, "b": 2, "c": 3}
for k := range m {
    if k == "b" {
        delete(m, k)
    }
}
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.