> Как контролировать уникальные указатели и умножать их ровно один раз в функции double в Go (Go)

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

Компании: Т-Банк

Стек: Go

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

В Go нет встроенных умных указателей, как в C++. Управление памятью осуществляется через сборщик мусора, поэтому концепция "уникальных указателей" не применяется напрямую. Однако если вам нужно гарантировать, что объект будет использован ровно один раз (например, для идемпотентной операции), можно использовать паттерн с sync.Once или флаг состояния.

Пример функции double, которая умножает значение ровно один раз:

GO
type UniqueValue struct {
value int
used bool
}
func (u *UniqueValue) Double() (int, error) {
if u.used {
return 0, fmt.Errorf("value already doubled")
}
u.used = true
u.value *= 2
return u.value, nil
}

Или с sync.Once для потокобезопасности:

GO
type SafeDoubler struct {
value int
once sync.Once
}
func (s *SafeDoubler) Double() int {
s.once.Do(func() {
s.value *= 2
})
return s.value
}

Если речь о контроле уникальности указателей (чтобы не было копий), используйте интерфейсы и запрет на копирование через встраивание sync.Mutex или приватные поля. В Go обычно достаточно явного проектирования API, чтобы избежать множественного использования.

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

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