Sobes.tech
Junior — Middle

Czy możesz wyjaśnić koncepcję 'Once' w języku Go i w jakich przypadkach jest stosowana?

sobes.tech AI

Odpowiedź od AI

W języku Go sync.Once to struktura, która gwarantuje, że określona funkcja zostanie wykonana tylko raz, nawet jeśli wywołanie pochodzi z wielu gorutyn jednocześnie. Jest to przydatne do inicjalizacji zasobów, które muszą być utworzone tylko raz, na przykład ustanowienie połączenia z bazą danych lub załadowanie konfiguracji.

Przykład użycia:

var once sync.Once

func initialize() {
    fmt.Println("Inicjalizacja zakończona")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Czekanie na zakończenie gorutyn
}

W tym przykładzie funkcja initialize zostanie wywołana dokładnie raz, niezależnie od liczby gorutyn.