ProgramlamaKıdemli Go Geliştirici

Go'da isimlendirilmiş geri dönüş değerleri nasıl çalışır? Kullanımlarıyla ilgili avantajlar ve tehlikeler nelerdir ve bu bağlamda zero values'ın özellikleri nelerdir?

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

Cevap

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:

  • Hata değişkenine açıkça bir değer atlamayı unutursanız, geri dönecek olan onun zero value'su (genellikle nil for error) olur. Bu, mantıksal hataları gizleyebilir.
  • İsimlendirilmiş sonuçlar için zero values, varsayılan başlatma ve geri döndürme için kullanılır.
  • İsimlendirilmiş sonuçları dikkatlice kullanın: sadece fonksiyondan geri dönüşün açık bir anlamı olduğunda okunabilirliği artırır.

Kandırmaca soru

İ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 }

Gerçek hata örnekleri


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