Sobes.tech
Junior — Middle

Go тилиндеги sync.Once структурасынын максаты жана иштөө принциби жөнүндө түшүндүрүңүз.

sobes.tech AI

AIден жооп

sync.Once Go'да колдонулат, белгилүү бир операциянын (мисалы, баштапкы түзөтүү) бир гана жолу аткарылышын камсыз кылуу үчүн, эгерде бир нече goroutine аны бир убакта чакырса да. Бул ленив баштапкы түзөтүү же ресурстарды конфигурациялоо үчүн пайдалуу.

Ишке ашыруу принциби:

  • sync.Once ички белгилүү бир тилкени камтыйт, ал функциянын алгачкы аткарылганын көзөмөлдөйт.
  • Метод Do(f func()) функция f кабыл алат жана анын бир гана жолу чакырылышын кепилдейт.
  • Эгер бир нече goroutine бир убакта Do чакырса, алардын бирөөсү гана функцияны аткарат, калгандары аяктоону күтүшөт.

Мисал:

var once sync.Once

func initialize() {
    fmt.Println("Баштапкы түзөтүү аяктады")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Goroutine-дардын аяктоосун күтүү
}

Бул мисалда, "Баштапкы түзөтүү аяктады" билдирүүсү так бир жолу чыгат.