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.Onceobsahuje interní vlajku, která sleduje, zda byla funkce již provedena.- Metoda
Do(f func())přijímá funkcifa zaručuje, že bude volána pouze jednou. - Pokud několik gorutin volá
Dosouč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.