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-дардын аяктоосун күтүү
}
Бул мисалда, "Баштапкы түзөтүү аяктады" билдирүүсү так бир жолу чыгат.