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-ҳо
}

Дар ин мисол, паёми "Инициализация анҷом ёфт" танҳо як маротиба нишон дода мешавад.