Sobes.tech
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.Once conține un steag intern care urmărește dacă funcția a fost deja executată.
  • Metoda Do(f func()) acceptă o funcție f ș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ă.