ProgramlamaGo Geliştirici

Go'da blank identifier nedir ve nerede doğru kullanılır? Kullanımında herhangi bir 'karmakarışıklık' var mı?

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

Cevap

Blank identifier (_) — Go'daki özel bir tanımlayıcıdır ve değerleri yoksaymak için kullanılır. Bir fonksiyonun döndürdüğü değer gerektiğinde, yalnızca kube işlevlerini çağırmak amacıyla paketlerin içe aktarılmasında veya arayüzlerin uygulanmasında kullanılır.

Örnekler:

// Hata döndürme değerini yoksayıyoruz data, _ := ioutil.ReadFile("file.txt") // Paketi yalnızca yan etkileri için içe aktarıyoruz import _ "net/http/pprof"

Ayrıca, blank identifier, arayüzü uygularken tüm yöntemleri açıkça kullanmadan da yardımcı olur:

var _ io.Reader = (*MyReader)(nil) // Tip arayüzü uygulamazsa derleme başarısız olur

Karmakarışık bir soru

Sürekli hata bastırma için blank identifier kullanmak güvenli midir?

Cevap: Hayır. Blank identifier, hatayı yoksaymaya olanak tanısa da, bu güvenli bir uygulama değildir — hataların bastırılması genellikle ölümcül hatalara veya programın yanlış çalışmasına yol açar. Her zaman bilerek hataları işlemek gerekir ve yalnızca anlaşılır yerlerde (örneğin, mantık için açıkça önemsiz olan yerlerde) hataların bastırılması için blank identifier kullanılmalıdır.

Gerçek hatalardan örnekler


Hikaye

Dosya işlemleri için bir uygulamada, geliştirici _, _ = file.Write(...) yapısını her yerde kullanarak yazma hatalarını yoksayıyordu. Sonuç olarak, disk dolduğunda veya yazma hatası oluştuğunda program 'her şey yolunda' gibi çalışmaya devam ediyor ve veri kaybına yol açıyordu.


Hikaye

Bir denetim projesinde denetçi, bir fonksiyon hata döndürdüğünde her zaman bastırılması gerektiğini düşünüyordu (_). Bunun sonucunda işlem günlüğü yazma hataları test sırasında fark edilmedi — önemli veriler kayboldu ve sebebi anlaşılamadı.


Hikaye

Go'yu öğrenen bir öğrenci, birkaç üçüncü taraf paketi içe aktarırken blank identifier kullandı, oysa bu hiç gerekli değildi. Sonuç olarak, ikili dosyanın boyutu neredeyse iki katına çıktı çünkü tüm taraf etkisi paketleri nihai uygulamaya eklendi.