ProgramlamaGo Backend Geliştirici

Go'da değişkenlerin başlatılması nasıl çalışır ve zero values (sıfır değerleri) kullanmanın tehlikeleri nelerdir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Go'da, açık bir başlatıcı olmadan tanımlanan değişkenler, farklı türler için değişen belirli sıfır değerleri (zero values) alır:

  • int — 0
  • bool — false
  • string — ""
  • işaretçiler, arayüzler, dilimler, haritalar, kanallar, fonksiyonlar — nil

Bu kullanışlıdır (bellekte çöp yok), ancak tehlikeli olabilir: bazı türler, örneğin, dilimler ve haritalar için nil değeriyle çalışmak panik veya hatalara yol açabilir.

Örnek:

var m map[string]int m["key"] = 1 // panic: nil haritadaki bir girişe atama var s []int fmt.Println(s, s == nil) // [] true (eleman eklenebilir, ancak indiste erişilemez)

Kandırma Sorusu

nil değerinin dilim ile harita/kanal arasındaki farkı nedir ve bunlar hangi hatalara yol açar?

Doğru cevap: nil değeri olan bir dilimi fonksiyonlara geçirebilir, append ve range'de kullanabilirsin — bu güvenlidir, ancak nil haritası ile yazma denemesi panik yaratır (ancak okuma güvenlidir ve sıfır değerini getirir).

Örnek:

var m map[string]int fmt.Println(m["no_key"]) // 0 — güvenli m["key"] = 1 // panic! var s []int s = append(s, 42) // tamam

Bu konunun inceliklerini bilmemekten kaynaklanan gerçek hata örnekleri


Hikaye

Açıklama: Büyük bir projede veri toplamak için başlatılmamış haritalar kullanıldı. İlk yazmada uygulama sürekli olarak panik yapıyordu. Sorun, yeni istatistikler eklendiğinde üretim ortamında ortaya çıktı.


Hikaye

Açıklama: Hizmet, başlatılmamış bir dilimi JSON olarak API cevabı olarak gönderdi. [] yerine istemciler null aldı — her iki durumu işlemek için ön uçta şemayı değiştirmek zorunda kaldık.


Hikaye

Açıklama: Önbellek modülünde nil harita ile boş bir haritayı yanlışlıkla karşılaştırdık ve bu nedenle, öğelerin olup olmadığını yanlış belirledik. Bu, veritabanına gereksiz erişimlere ve performans düşüşüne yol açtı.