Sobes.tech
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.Once enthält eine interne Flagge, die verfolgt, ob die Funktion bereits ausgeführt wurde.
  • Die Methode Do(f func()) akzeptiert eine Funktion f und stellt sicher, dass sie nur einmal aufgerufen wird.
  • Wenn mehrere Goroutinen Do gleichzeitig 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.