Sobes.tech
Junior — Middle

Можете ли да обясните концепцията за 'Once' в езика Go и в кои случаи се прилага?

sobes.tech AI

Отговор от 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 ще бъде извикана точно веднъж, независимо от броя на горутините.