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-ების დასრულებას
}
ამ მაგალითში, შეტყობინება "დაწყების დასრულდა" გამოჩნდება მხოლოდ ერთხელ.