Junior — Middle
Erklären Sie den Zweck und das Funktionsprinzip der Struktur sync.Once in Go.
sobes.tech KI
Antwort von AI
sync.Once in Go wird verwendet, um sicherzustellen, dass eine bestimmte Operation (z.B. Initialisierung) genau einmal ausgeführt wird, auch wenn mehrere Goroutinen sie gleichzeitig aufrufen. Dies ist nützlich für lazy Initialization oder Ressourcen-Setup.
Funktionsprinzip:
sync.Onceenthält eine interne Flagge, die verfolgt, ob die Funktion bereits ausgeführt wurde.- Die Methode
Do(f func())akzeptiert eine Funktionfund stellt sicher, dass sie nur einmal aufgerufen wird. - Wenn mehrere Goroutinen
Dogleichzeitig aufrufen, führt nur eine die Funktion aus, die anderen warten auf den Abschluss.
Beispiel:
var once sync.Once
func initialize() {
fmt.Println("Initialisierung abgeschlossen")
}
func main() {
for i := 0; i < 5; i++ {
go func() {
once.Do(initialize)
}()
}
time.Sleep(time.Second) // Warten auf Goroutinen
}
In diesem Beispiel wird die Meldung "Initialisierung abgeschlossen" genau einmal ausgegeben.