Sobes.tech
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.Once belső 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 egy f fü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.