Junior — Middle
Paaiškinkite sync.Once struktūros paskirtį ir veikimo principą Go kalboje.
sobes.tech AI
Atsakymas iš AI
sync.Once Go kalboje naudojamas užtikrinti, kad tam tikra operacija (pvz., inicializacija) būtų atlikta tik kartą, net jei kelios gorutinos ją kviečia vienu metu. Tai naudinga vėlyvai inicializacijai arba išteklių konfigūravimui.
Veikimo principas:
sync.Onceturi vidinį žymeklį, kuris stebi, ar funkcija jau buvo vykdyta.- Metodas
Do(f func())priima funkcijąfir užtikrina, kad ji bus iškviesta tik kartą. - Jei kelios gorutinos kviečia
Dovienu metu, tik viena iš jų vykdys funkciją, kitos lauks jos pabaigos.
Pavyzdys:
var once sync.Once
func initialize() {
fmt.Println("Inicijalizacija baigta")
}
func main() {
for i := 0; i < 5; i++ {
go func() {
once.Do(initialize)
}()
}
time.Sleep(time.Second) // Laukiame gorutinos pabaigos
}
Šiame pavyzdyje pranešimas "Inicijalizacija baigta" bus išspausdintas tik vieną kartą.