Go'da bir fonksiyonun imzasında geri dönüş değerlerinin isimlerini açıkça belirtmek mümkündür. Bu değerler otomatik olarak kendi türleri için zero value ile başlatılır. Bu, çok sayıda geri dönüş değişkeni ile çalışırken kullanışlıdır ve return operatörü aracılığıyla (argüman olmadan) değerleri gayriresmi olarak "geri döndürmeyi" sağlar.
Örnek:
func foo() (x int, err error) { if someCheck() { x = 1 return // (1, nil) dönecek } return // eğer x ve err açıkça atanmadıysa (0, nil) dönecek }
İnce noktalar:
nil for error) olur. Bu, mantıksal hataları gizleyebilir.İsimlendirilmiş sonuçlar içeren bir fonksiyon, geri dönüş değişkenlerine hiçbir atama yapılmadığı takdirde ve sadece return çağrıldığında ne dönecektir?
Cevap: Zero values'ları dönecektir. Örneğin, int için — 0, işaretçi için — nil.
Örnek:
func test() (res *MyType, code int) { return // aynı şey "return nil, 0" demektir }
Hikaye
Bir finansal hizmette, isimlendirilmiş geri dönüşlere sahip bir fonksiyon içinde err (error) değişkenine değer atanmayı unuttular. Bu yüzden bir hata durumunda, fonksiyon nil döndürdü ve hata kayboldu. Sonuç olarak, işlem işleme süreci bozuldu ve bazı işlemler gözden kaçtı.
Hikaye
Fonksiyonun yeniden yapılandırılmasında yeni bir isimlendirilmiş geri dönüş sonucu eklendi, ancak önceki geri dönüş tipi ile uyumsuzluk gözden kaçtı — testler, sıfır değerinin döndürülmesi nedeniyle sorunu göz ardı etti ve bu da depoda sessiz hataya yol açtı.
Hikaye
Yardımcı fonksiyonlardan birinde, isimlendirilmiş sonuç aracılığıyla hatalar kaydedildi, ancak bazen hem geri dönüşte hem de kayıtta dikkate almayı unuttular, bu da yeniden üretimi zor olan hatalara ("error lost") yol açtı.