Sobes.tech
Junior — Middle

Vysvetlite účel a princíp fungovania štruktúry sync.Once v Go.

sobes.tech AI

Odpoveď od AI

sync.Once v Go se uporablja za zagotovitev, da bo določena operacija (npr. inicializacija) izvedena točno enkrat, tudi če jo več gorutin hkrati kliče. To je uporabno za leno inicializacijo ali nastavitev virov.

Načelo delovanja:

  • sync.Once vsebuje notranjo zastavico, ki spremlja, ali je funkcija že bila izvedena.
  • Metoda Do(f func()) sprejme funkcijo f in zagotavlja, da bo le-ta klicana samo enkrat.
  • Če več gorutin kliče Do hkrati, bo le ena izvedla funkcijo, ostale pa počakale na zaključek.

Primer:

var once sync.Once

func initialize() {
    fmt.Println("Inicializacija zaključena")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Čakanje na goroutine
}

V tem primeru bo sporočilo "Inicializacija zaključena" prikazano točno enkrat.