Sobes.tech
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.Once içsel bir bayrak içerir ve fonksiyonun zaten çalıştırılıp çalıştırılmadığını izler.
  • Do(f func()) metodu, bir fonksiyon f kabul 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.