0Pricing
Go Academy · Ders

sync.Once ve sync.Map

Tek seferlik başlatma ve eşzamanlı eşlemeler

sync.Once ve sync.Map, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

sync.Once

sync.Once, kaç goroutin eşzamanlı olarak çağırırsa çağırsın bir işlevin tam olarak bir kez çalışmasını garanti eder. Klasik kullanım alanı: tekil nesnenin tembel başlatılması.

Once.Do

Do çağrısının yalnızca ilki işlevi çalıştırır; sonraki çağrılar farklı goroutinlerden yapılsa bile işlem yapmaz.

var once sync.Once
var db *Database

func getDB() *Database {
    once.Do(func() { db = openDB() })
    return db
}

Once sıfırlanmaz

Bir sync.Once çalıştırıldıktan sonra sıfırlanamaz. Sıfırlanabilir bir tek seferlik çalıştırmaya ihtiyacınız varsa durumu bir atomik işlem veya mutex ile kendiniz yönetin.

Once sırasında panik davranışı

Do'ya geçirilen işlev panik yaparsa Do tamamlanmış kabul edilir ve sonraki çağrılar işlem yapmaz. Panik ilk çağırana yayılır.

sync.Map'e genel bakış

sync.Map, dış kilitleme gerektirmeyen eşzamanlı bir eşlemelerdir. İki kalıp için optimize edilmiştir: (1) bir kez yazma, çok kez okuma; (2) her goroutin için ayrık anahtar kümeleri.

sync.Map yöntemleri

Temel yöntemler: Store, Load, LoadOrStore, Delete, Range. Genel tür parametreleri yoktur — anahtarlar ve değerler interface{} türündedir.

var m sync.Map
m.Store("key", 42)
v, ok := m.Load("key")
if ok { fmt.Println(v.(int)) }

LoadOrStore

LoadOrStore, anahtar varsa mevcut değeri döndürür; aksi takdirde yeni değeri kaydeder ve döndürür. Boole değeri, değerin yüklendiğini (true) veya kaydedildiğini (false) belirtir.

actual, loaded := m.LoadOrStore("key", "default")
if loaded { fmt.Println("existing:", actual) }

Range

Range, her biri için işlevi çağırarak tüm anahtar-değer çiftleri üzerinde yineler. Yinelemeyi durdurmak için false döndürün.

m.Range(func(k, v any) bool {
    fmt.Println(k, v)
    return true // continue
})

sync.Map ne zaman kullanılmalı

Çoğu durumda mutex içeren normal bir eşlemeyi tercih edin — bu daha basittir ve çoğu zaman daha hızlıdır. sync.Map'i, profil çıkarma işlemi çekişme olduğunu gösterdiğinde veya erişim kalıbı optimizasyon hedefleriyle eşleştiğinde kullanın.

LoadAndDelete

LoadAndDelete, değeri atomik olarak yükler ve anahtarı siler; önceki değeri ve anahtarın mevcut olup olmadığını döndürür.

v, loaded := m.LoadAndDelete("key")
if loaded { fmt.Println("deleted:", v) }

sync.Map genel tür desteklemez

sync.Map'te saklanan değerler any türündedir. Kod tabanınızda dağınık tür doğrulamalarından kaçınmak için sync.Map'i tür güvenli yöntemlere sahip, türü belirlenmiş bir yapıyla sarın.

Hızlı Kontrol

sync.Once neyi garanti eder?

Özet: sync.Once ve sync.Map

Ana noktalar:

  • sync.Once: bir işlevi tam olarak bir kez çalıştırır; geri alınamazdır
  • sync.Map: yoğun okuma veya ayrık anahtar kalıpları için optimize edilmiş eşzamanlı eşlemedir
  • Güvenlik için sync.Map çevresinde türü belirlenmiş sarmalayıcılar kullanın

Sıkça Sorulan Sorular

“sync.Once ve sync.Map” dersi ücretsiz mi?

Evet — “sync.Once ve sync.Map” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“sync.Once ve sync.Map” dersinde ne öğreneceğim?

Tek seferlik başlatma ve eşzamanlı eşlemeler Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“sync.Once ve sync.Map” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. sync.Mutex ve sync.RWMutex
  2. sync.WaitGroup
  3. sync.Once ve sync.Map
  4. Yarış Dedektörü ve Güvenli Örüntüler
← Go Academy Sayfasına Dön