Sobes.tech
Junior — Middle

Objasnite svrhu i princip rada strukture sync.Once u Go.

sobes.tech АИ

Одговор од АИ

sync.Once u Go jeziku koristi se za garantovanje da će određena operacija (npr. inicijalizacija) biti izvršena tačno jednom, čak i ako je više gorutina pozove istovremeno. Ovo je korisno za lenju inicijalizaciju ili podešavanje resursa.

Princip rada:

  • sync.Once sadrži internu zastavicu koja prati da li je funkcija već izvršena.
  • Metod Do(f func()) prihvata funkciju f i garantuje da će biti pozvana samo jednom.
  • Ako više gorutina pozove Do istovremeno, samo jedna će izvršiti funkciju, ostale će čekati da se ona završi.

Primer:

var once sync.Once

func initialize() {
    fmt.Println("Inicijalizacija završena")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Čekamo da gorutine završe
}

U ovom primeru, poruka "Inicijalizacija završena" biće prikazana tačno jednom.