Sobes.tech
Junior — Middle

Go tilida sync.Once tuzilmasining maqsadi va ishlash prinsipi haqida tushuntiring.

sobes.tech AI

AIdan javob

sync.Once in Go ishlatiladi, ma'lum bir operatsiya (masalan, boshlang'ich sozlamalar) faqat bir marta bajarilishini ta'minlash uchun, hatto bir nechta goroutinlar uni bir vaqtning o'zida chaqirsa ham. Bu kechiktirilgan boshlang'ich sozlash yoki resurslarni sozlash uchun foydalidir.

Ishlash prinsipi:

  • sync.Once ichki bayroqni o'z ichiga oladi va funksiyaning allaqachon bajarilganligini kuzatadi.
  • Do(f func()) metodi, f funksiyasini qabul qiladi va uni faqat bir marta chaqirilishini ta'minlaydi.
  • Agar bir nechta goroutinlar Doni bir vaqtning o'zida chaqirsa, faqat biri funksiyani bajaradi, boshqalar tugashini kutadi.

Misol:

var once sync.Once

func initialize() {
    fmt.Println("Boshlang'ich sozlamalar bajarildi")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Goroutinlar tugashini kutish
}

Bu misolda, "Boshlang'ich sozlamalar bajarildi" xabari aniq bir marta chiqariladi.