Sobes.tech
Junior — Middle

Vysvětlete účel a princip fungování struktury sync.Once v Go.

sobes.tech AI

Odpověď od AI

sync.Once v Go se používá k zajištění, že určitá operace (například inicializace) bude provedena pouze jednou, i když ji více gorutin volá současně. To je užitečné pro línou inicializaci nebo konfiguraci zdrojů.

Princip fungování:

  • sync.Once obsahuje interní vlajku, která sleduje, zda byla funkce již provedena.
  • Metoda Do(f func()) přijímá funkci f a zaručuje, že bude volána pouze jednou.
  • Pokud několik gorutin volá Do současně, pouze jedna z nich provede funkci, ostatní počkají na její dokončení.

Příklad:

var once sync.Once

func initialize() {
    fmt.Println("Inicializace dokončena")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Čekáme na dokončení gorutin
}

V tomto příkladu bude zpráva "Inicializace dokončena" vytištěna přesně jednou.