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
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.
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.