> Как правильно работать с map и структурой в Go, чтобы избежать паники (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

В Go паника при работе с map и структурами чаще всего возникает из-за записи в неинициализированную map или доступа к нулевому указателю внутри структуры. Основные правила:

  1. Инициализация map: map нужно создавать через make() или литералом. Запись в nil map вызывает панику.

    GO
    var m map[string]int
    m["key"] = 1 // паника: assignment to entry in nil map
    // Правильно:
    m := make(map[string]int)
    m["key"] = 1
  2. Чтение из nil map безопасно: возвращает zero value, но запись - нет.

  3. Проверка существования ключа: используйте второе возвращаемое значение.

    GO
    if val, ok := m["key"]; ok {
    // ключ существует
    }
  4. Структуры с указателями: если структура содержит map или указатель, инициализируйте их перед использованием.

    GO
    type Config struct {
    Data map[string]string
    }
    var c Config
    c.Data["key"] = "val" // паника: c.Data == nil
    // Правильно:
    c.Data = make(map[string]string)
    c.Data["key"] = "val"
  5. Горутины и конкурентный доступ: map не потокобезопасна. Используйте sync.Mutex или sync.Map.

    GO
    var mu sync.Mutex
    mu.Lock()
    m["key"] = "val"
    mu.Unlock()
  6. Проверка на nil перед записью: всегда проверяйте, инициализирована ли map, особенно в аргументах функций.

    GO
    func setValue(m map[string]int, key string, val int) {
    if m == nil {
    m = make(map[string]int)
    }
    m[key] = val
    }

Следуя этим правилам, вы избежите паники и сделаете код надёжным.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью