Junior — Middle
Explica scopul și principiul de funcționare al structurii sync.Once în Go.
sobes.tech AI
Răspuns de la AI
sync.Once în Go este utilizat pentru a garanta că o anumită operație (de exemplu, inițializarea) va fi executată o singură dată, chiar dacă mai multe goroutines o apelează simultan. Acest lucru este util pentru inițializare leneșă sau configurarea resurselor.
Principiul de funcționare:
sync.Onceconține un steag intern care urmărește dacă funcția a fost deja executată.- Metoda
Do(f func())acceptă o funcțiefși garantează că va fi apelată o singură dată. - Dacă mai multe goroutines apelează
Doîn același timp, doar una va executa funcția, celelalte vor aștepta finalizarea.
Exemplu:
var once sync.Once
func initialize() {
fmt.Println("Inițializare finalizată")
}
func main() {
for i := 0; i < 5; i++ {
go func() {
once.Do(initialize)
}()
}
time.Sleep(time.Second) // Așteaptă finalizarea goroutine-urilor
}
În acest exemplu, mesajul "Inițializare finalizată" va fi afișat exact o dată.