Junior — Middle
Go'da sync.Once yapısının amacını ve çalışma prensibini açıklayın.
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da sync.Once, belirli bir işlemin (örneğin, başlatmanın) yalnızca bir kez gerçekleştirilmesini sağlar, hatta birden fazla goroutine aynı anda çağırsa bile. Bu, tembel başlatma veya kaynak yapılandırması için faydalıdır.
Çalışma prensibi:
sync.Onceiçsel bir bayrak içerir ve fonksiyonun zaten çalıştırılıp çalıştırılmadığını izler.Do(f func())metodu, bir fonksiyonfkabul eder ve bunun yalnızca bir kez çağrılmasını garanti eder.- Birden fazla goroutine
Do'yu aynı anda çağırırsa, yalnızca biri fonksiyonu çalıştırır, diğerleri tamamlanmasını bekler.
Örnek:
var once sync.Once
func initialize() {
fmt.Println("Başlatma tamamlandı")
}
func main() {
for i := 0; i < 5; i++ {
go func() {
once.Do(initialize)
}()
}
time.Sleep(time.Second) // Goroutine'lerin tamamlanmasını bekle
}
Bu örnekte, "Başlatma tamamlandı" mesajı tam olarak bir kez gösterilecektir.