Junior — Middle
Magyarázd el a sync.Once szerkezet célját és működési elvét Go-ban.
sobes.tech MI
Válasz az MI-től
sync.Once Go-ban arra szolgál, hogy garantálja, hogy egy adott művelet (például inicializálás) pontosan egyszer hajtódjon végre, még akkor is, ha több goroutine hívja meg egyszerre. Ez hasznos késleltetett inicializáláshoz vagy erőforrás-beállításhoz.
Működési elv:
- A
sync.Oncebelső zászlót tartalmaz, amely nyomon követi, hogy a függvény már végrehajtásra került-e. - A
Do(f func())metódus elfogad egyffüggvényt, és garantálja, hogy csak egyszer hívódik meg. - Ha több goroutine hívja a
Do-t egyidejűleg, csak egy hajtja végre a függvényt, a többi várakozik a befejezésre.
Példa:
var once sync.Once
func initialize() {
fmt.Println("Inicializálás befejezve")
}
func main() {
for i := 0; i < 5; i++ {
go func() {
once.Do(initialize)
}()
}
time.Sleep(time.Second) // Várakozás a goroutine-ok befejezésére
}
Ebben a példában az "Inicializálás befejezve" üzenet pontosan egyszer fog megjelenni.