Что такое Once в Go

«Что такое Once в Go» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

sync.Once — это тип из пакета sync, который гарантирует, что функция выполнится только один раз, даже если Do() вызывается из нескольких горутин. Полезен для инициализации ресурсов, которые должны быть созданы единожды (например, конфиги, подключения к БД).

var once sync.Once

func setup() {
    fmt.Println("Инициализация...")
}

func main() {
    for i := 0; i < 5; i++ {
        once.Do(setup) // Выведет "Инициализация..." только один раз
    }
}

Особенности:

  • Потокобезопасен
  • Не имеет метода сброса состояния
  • Если Do паникует, последующие вызовы не будут выполнять функцию