Dalam Go, parameter hasil dinamakan membenarkan menetapkan nilai tertentu untuk dikembalikan oleh fungsi. Walau bagaimanapun, tingkah laku ini berbeza daripada fungsi yang kembali tanpa parameter hasil dinamakan, yang boleh menimbulkan persoalan.
Pertimbangkan kod berikut, di mana NormalReturns dan NamedReturns ialah fungsi yang cuba mengembalikan ralat apabila panik:
func NormalReturns(n int) error { var err error defer catch(&err) panicIf42(n) return err } func NamedReturns(n int) (err error) { defer catch(&err) panicIf42(n) return }
Apabila panik ditimbulkan dalam panikIf42, NormalReturns mengembalikan sifar, walaupun seseorang menjangkakan ralat. Ini berlaku kerana fungsi tangkapan tertunda memberikan ralat selepas panik mengembalikan kawalan kepada pemanggil.
Sebaliknya, NamedReturns mengembalikan nilai ralat yang diubah suai kerana parameter hasil dinamakan membenarkan fungsi tertunda mengubah suainya. Apabila panik berlaku, fungsi tangkapan tertunda memberikan ralat, yang disimpan dan dikembalikan apabila fungsi tamat.
Spesifikasi untuk Penyata Pemulangan:
"Semua keputusan nilai dimulakan kepada nilai sifar untuk jenisnya apabila masuk ke fungsi ... Pernyataan 'kembali' yang menentukan keputusan menetapkan parameter hasil sebelum sebarang fungsi tertunda dilaksanakan."
Spesifikasi untuk Penyata Tangguh:
"Fungsi tertunda boleh mengakses dan mengubah suai parameter hasil sebelum ia dikembalikan."
Oleh itu, dalam NormalReturns, kerana tiada parameter hasil dinamakan, nilai pulangan dimulakan kepada sifar dan kekal sifar selepas panik. Dalam NamedReturns, fungsi tertunda mengubah suai parameter hasil ralat dan nilainya digunakan sebagai ralat yang dikembalikan.
Atas ialah kandungan terperinci Go Named Returns vs. Normal Returns: Mengapa Pengendalian Panik Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!