> Зачем нужны указатели в структуре с мапой и мьютексом в Go, если мапа является ссылочным типом (Go)

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

Компании: Ютека

Стек: Go

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

Даже несмотря на то, что мапа (map) в Go является ссылочным типом, указатели на структуру с мапой и мьютексом нужны для корректной синхронизации. Если передавать такую структуру по значению, то мьютекс (sync.Mutex) скопируется, а копия мьютекса - это отдельный объект, не связанный с оригиналом. В результате горутины будут блокировать разные мьютексы, и защита данных перестанет работать. Указатель же гарантирует, что все горутины работают с одним и тем же экземпляром мьютекса и мапы.

Пример:

GO
type SafeMap struct {
mu sync.Mutex
m map[string]int
}
func NewSafeMap() *SafeMap {
return &SafeMap{m: make(map[string]int)}
}

Если бы мы возвращали SafeMap (без указателя), то при присваивании или передаче в функцию мьютекс копировался бы, и синхронизация была бы нарушена. Указатель решает эту проблему.

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

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