Sobes.tech
Junior — Middle

Go'догу жиптердин синхрондоштуусунда sync.Once тибинин негизги ролу эмнеде?

sobes.tech AI

AIден жооп

Go тилиндеги sync.Once тиби белгилүү бир код бөлүгүн так бир жолу ишке ашырылуусун камсыз кылуу үчүн колдонулат, эгер ал бир нече жиптен (goroutine) чакырылса да.

Негизги ролу — ресурстарды коопсуз жана туура баштоо (мисалы, singleton түзүү), жарыш шарттарын жана кайра иштетүүнү алдын алуу.

Колдонуу мисалы:

var once sync.Once
var config *Config

func loadConfig() {
    config = &Config{/* баштоо */}
}

func GetConfig() *Config {
    once.Do(loadConfig) // loadConfig only бир жолу чакырылат
    return config
}

Мындайча айтканда, sync.Once функциянын көп жиптүү чөйрөдө коопсуз жана бир жолу гана ишке ашырылышын камсыздайт.