Dalam Go, perbezaan antara pulangan biasa dan dinamakan terletak di luar kebolehbacaan. Pemulangan bernama membenarkan pengubahsuaian untuk mengembalikan nilai, menjejaskan hasil sekiranya berlaku panik.
Pertimbangkan kod berikut:
import ( "fmt" "log" ) func catch(err *error) { if r := recover(); r != nil { *err = fmt.Errorf("recovered panic: %v", r) } } func panicIf42(n int) { if n == 42 { panic("42!") } } 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 } func main() { err := NamedReturns(42) log.Printf("NamedReturns error: %v", err) err = NormalReturns(42) log.Printf("NormalReturns error: %v", err) }
Tanpa diduga, NormalReturns tidak dikembalikan, manakala NamedReturns mengembalikan ralat. Bagaimanakah tingkah laku ini boleh dijelaskan?
Dalam NormalReturns, nilai pulangan dimulakan kepada sifar (nilai sifar ralat). Memandangkan panik dalam panicIf42() menghalang penyataan pulangan daripada dicapai, pembolehubah hasil kekal ditetapkan kepada sifar.
Sebaliknya, NamedReturns mengisytiharkan pembolehubah pulangan bernama ralat. Apabila panik, fungsi tangkapan tertunda() mengubah suai pembolehubah ini. Nilai hasil yang dinamakan dipelihara dan dikembalikan, walaupun penyataan pemulangan tidak dilaksanakan.
Pulangan bernama memberikan lebih fleksibiliti dan kawalan ke atas nilai pulangan. Mereka membolehkan pengubahsuaian nilai pulangan oleh fungsi tertunda dan memastikan nilai yang ditentukan dikembalikan walaupun sekiranya berlaku panik. Dengan memahami nuansa ini, pembangun boleh menggunakan pulangan dinamakan dengan berkesan untuk mengendalikan kes luar biasa dan menyampaikan keadaan ralat dengan tepat.
Atas ialah kandungan terperinci Bagaimanakah Pulangan Dinamakan dan Pulangan Normal Berbeza dalam Mengendalikan Panik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!