Sobes.tech
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-ების დასრულებას
}

ამ მაგალითში, შეტყობინება "დაწყების დასრულდა" გამოჩნდება მხოლოდ ერთხელ.