Sobes.tech
Junior — Middle

Leg uit wat het doel is en hoe de structuur sync.Once in Go werkt.

sobes.tech AI

Antwoord van AI

sync.Once in Go wordt gebruikt om te garanderen dat een bepaalde operatie (bijvoorbeeld initialisatie) slechts één keer wordt uitgevoerd, zelfs als meerdere goroutines deze gelijktijdig aanroepen. Dit is handig voor lazy initialisatie of resource-instellingen.

Werking principe:

  • sync.Once bevat een interne vlag die bijhoudt of de functie al is uitgevoerd.
  • De methode Do(f func()) accepteert een functie f en garandeert dat deze slechts één keer wordt aangeroepen.
  • Als meerdere goroutines Do gelijktijdig aanroepen, voert slechts één de functie uit, de anderen wachten tot deze klaar is.

Voorbeeld:

var once sync.Once

func initialize() {
    fmt.Println("Initialisatie voltooid")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Wacht tot alle goroutines klaar zijn
}

In dit voorbeeld wordt het bericht "Initialisatie voltooid" precies één keer weergegeven.