Sobes.tech
Junior — Middle

Izskaidrojiet sync.Once struktūras mērķi un darbības principu Go valodā.

sobes.tech AI

Atbilde no AI

sync.Once Go valodā tiek izmantots, lai nodrošinātu, ka noteikta operācija (piemēram, inicializācija) tiks izpildīta tikai vienreiz, pat ja vairākas gorutinas to vienlaikus izsauc. Tas ir noderīgi gaidošas inicializācijas vai resursu konfigurācijas gadījumā.

Darba princips:

  • sync.Once satur iekšēju karogu, kas seko tam, vai funkcija jau ir izpildīta.
  • Metode Do(f func()) pieņem funkciju f un garantē, ka tā tiks izsaukta tikai vienreiz.
  • Ja vairākas gorutinas vienlaikus izsauc Do, tikai viena no tām izpildīs funkciju, pārējās gaidīs tās pabeigšanu.

Piemērs:

var once sync.Once

func initialize() {
    fmt.Println("Inicializācija pabeigta")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Gaidām gorutinas pabeigšanu
}

Šajā piemērā ziņojums "Inicializācija pabeigta" tiks parādīts tieši vienu reizi.