Что такое паттерн Singleton?

Junior
1.3k просмотров
AFK Offer AI

Singleton гарантирует, что объект создаётся ровно один раз за время жизни программы. В Go идиоматичный способ — sync.Once.

var (
    instance *Database
    once     sync.Once
)

func GetDB() *Database { once.Do(func() { instance = &Database{conn: connect()} }) return instance }

sync.Once потокобезопасен и гарантирует, что функция вызовется только один раз, даже при конкурентном доступе из тысячи горутин. Не используй init() для синглтона — он вызывается при импорте пакета и усложняет тестирование. В целом, синглтон считается антипаттерном — лучше передавай зависимости явно.

Следующий вопрос

Что такое N+1 проблема?