Sobes.tech
Back to questions
Junior — Middle
91

Можете объяснить концепцию 'Once' в языке Go и в каких случаях она применяется?

Answer from AI

sobes.tech AI

В языке Go sync.Once — это структура, которая гарантирует, что определённая функция будет выполнена только один раз, даже если вызов происходит из нескольких горутин одновременно. Это полезно для инициализации ресурсов, которые должны быть созданы единожды, например, установка соединения с базой данных или загрузка конфигурации.

Пример использования:

var once sync.Once

func initialize() {
    fmt.Println("Инициализация выполнена")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Ждём завершения горутин
}

В этом примере функция initialize будет вызвана ровно один раз, независимо от количества горутин.