Практическая задача: разбор кода go

Добавьте mutex и выполняйте проверку с возможной вставкой под одной блокировкой. Существующее значение возвращается без замены, даже если это пустая строка.

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

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

Добавьте mutex и выполняйте проверку с возможной вставкой под одной блокировкой. Существующее значение возвращается без замены, даже если это пустая строка.

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

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

Условие

type SafeMap struct {
    data map[string]string
}

func (s *SafeMap) GetOrCreate(key, value string) string {
}

Ответ

Добавьте mutex и выполняйте проверку с возможной вставкой под одной блокировкой. Существующее значение возвращается без замены, даже если это пустая строка.

Вариант поддерживает нулевое значение SafeMap:

import "sync"

type SafeMap struct {
    mu sync.Mutex
    data map[string]string
}

func (s *SafeMap) GetOrCreate(key, value string) string {
    s.mu.Lock()
    defer s.mu.Unlock()
    if existing, ok := s.data[key]; ok {
        return existing
    }
    if s.data == nil { s.data = make(map[string]string) }
    s.data[key] = value
    return value
}

Все остальные методы должны защищать data тем же mutex. Нельзя копировать SafeMap после начала использования. Разделение проверки и вставки на два независимо защищённых участка допустило бы конкурирующее создание.

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

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

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

Подробнее