Sobes.tech
Junior — Middle

Go-da sync.Once strukturunun məqsədini və iş prinsipini izah edin.

sobes.tech Süni İntellekt

AI-dan cavab

sync.Once in Go istifadə olunur ki, müəyyən bir əməliyyat (məsələn, ilkinləşdirmə) yalnız bir dəfə yerinə yetirilsin, hətta bir neçə goroutine onu eyni zamanda çağırsa belə. Bu, ehtiyatların tərtibində və ya tələsmədən ilkinləşdirmədə faydalıdır.

İş prinsipi:

  • sync.Once daxili bir bayraq saxlayır və funksiyanın artıq icra olunub-olunmadığını izləyir.
  • Do(f func()) metodu, f funksiyasını qəbul edir və onun yalnız bir dəfə çağırılmasını təmin edir.
  • Əgər bir neçə goroutine Do-nu eyni zamanda çağırsa, yalnız biri funksiyanı icra edəcək, digərləri isə tamamlanmasını gözləyəcək.

Nümunə:

var once sync.Once

func initialize() {
    fmt.Println("İlkinləşdirmə tamamlandı")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Goroutine-lərin tamamlanmasını gözləyir
}

Bu nümunədə, "İlkinləşdirmə tamamlandı" mesajı dəqiq bir dəfə göstəriləcək.