Junior — Middle
Маъзулоти ва принсипи коркарди сохтори sync.Once дар Go-ро шарҳ диҳед.
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-ҳо
}
Дар ин мисол, паёми "Инициализация анҷом ёфт" танҳо як маротиба нишон дода мешавад.