Junior — Middle
Обяснете предназначението и принципа на работа на структурата sync.Once в Go.
sobes.tech AI
Отговор от AI
sync.Once в Go се използва за гарантиране, че определена операция (например инициализация) ще бъде изпълнена точно веднъж, дори ако няколко горутини я извикват едновременно. Това е полезно за лениво инициализиране или настройка на ресурси.
Принцип на работа:
sync.Onceсъдържа вътрешен флаг, който следи дали функцията вече е изпълнена.- Методът
Do(f func())приема функцияfи гарантира, че тя ще бъде извикана само веднъж. - Ако няколко горутини извикат
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) // Изчакване за завършване на горутините
}
В този пример съобщението "Инициализацията е завършена" ще бъде изведено точно веднъж.