Sobes.tech
Junior — Middle

Оё шумо метавонед консепти 'Once' дар забони Go-ро шарҳ диҳед ва дар кадом ҳолатҳо истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

Дар забони Go, sync.Once як сохтор аст, ки кафолат медиҳад, ки як функсияи муайян танҳо як бор иҷро шавад, ҳатто агар занг ҳамзамон аз чанд goroutine анҷом дода шавад. Ин барои оғоз кардани захираҳое, ки бояд танҳо як бор эҷод шаванд, мисли барқарор кардани пайванд бо базаи додаҳо ё бор кардани конфигуратсия, кӯмак мекунад.

Маслиҳат барои истифода:

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ҳо анҷом ёбанд
}

Дар ин мисол, функсияи initialize дақиқ як бор фаро хонда мешавад, новобаста аз шумораи goroutineҳо.