Junior — Middle
Wyjaśnij cel i zasadę działania struktury sync.Once w Go.
sobes.tech AI
Odpowiedź od AI
sync.Once w Go jest używany do zapewnienia, że określona operacja (np. inicjalizacja) zostanie wykonana dokładnie raz, nawet jeśli kilka gorutyn wywoła ją jednocześnie. Jest to przydatne do leniwej inicjalizacji lub konfiguracji zasobów.
Zasada działania:
sync.Oncezawiera wewnętrzny flaga, która śledzi, czy funkcja już została wykonana.- Metoda
Do(f func())przyjmuje funkcjęfi gwarantuje, że zostanie ona wywołana tylko raz. - Jeśli kilka gorutyn wywoła
Dojednocześnie, tylko jedna z nich wykona funkcję, pozostałe będą czekać na jej zakończenie.
Przykład:
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 gorutyny
}
W tym przykładzie wiadomość "Inicjalizacja zakończona" zostanie wyświetlona dokładnie raz.