Как работает sync.Once?

Middle
357 просмотров
AFK Offer AI

sync.Once гарантирует, что переданная функция выполнится ровно один раз. Все горутины, вызвавшие Do(), блокируются до завершения первого вызова. Внутри — atomic load + mutex: быстрый путь (уже выполнено) — один atomic read, медленный (первый раз) — mutex + выполнение + atomic store. Если функция паникует — Once считает её выполненной (в Go 1.21 добавили OnceFunc/OnceValue с другим поведением). Потокобезопасен, идиоматичен, используй для любой одноразовой инициализации.

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

Как делать batch insert?