Dalam Go, mengendalikan berbilang ralat dengan cara yang bersih dan ringkas boleh menjadi satu cabaran. Pertimbangkan coretan kod berikut:
aJson, err1 := json.Marshal(a) bJson, err2 := json.Marshal(b) cJson, err3 := json.Marshal(c) dJson, err4 := json.Marshal(d) eJson, err5 := json.Marshal(e) fJson, err6 := json.Marshal(f) gJson, err4 := json.Marshal(g) if err1 != nil { return err1 } else if err2 != nil { return err2 } else if err3 != nil { return err3 } else if err4 != nil { return err4 } else if err5 != nil { return err5 } else if err5 != nil { return err5 } else if err6 != nil { return err6 }
Kod ini mempunyai beberapa isu. Pertama, ia menggunakan pernyataan berbilang if untuk mengendalikan setiap ralat secara berasingan. Ini menjadikan kod bertele-tele dan sukar dibaca. Kedua, ia mengembalikan ralat pertama yang dihadapinya, yang mungkin bukan ralat yang paling penting atau berkaitan.
Terdapat cara yang lebih baik untuk mengendalikan berbilang ralat dalam Go menggunakan penutupan fungsi. Berikut ialah versi kod yang disemak menggunakan penutupan fungsi:
var err error f := func(dest *D, src S) bool { *dest, err = json.Marshal(src) return err == nil } f(&aJson, a) && f(&bJson, b) && f(&cJson, c) && f(&dJson, d) && f(&eJson, e) && f(&fJson, f) && f(&gJson, g) return err
Kod ini mentakrifkan penutupan fungsi (f) yang mengambil dua parameter: penunjuk ke pembolehubah destinasi dan nilai sumber. Penutupan cuba untuk menggabungkan nilai sumber ke dalam pembolehubah destinasi dan menetapkan ralat jika tidak berjaya.
Penutupan fungsi kemudiannya digunakan untuk setiap nilai sumber dan hasilnya digabungkan menggunakan operator &&. Jika mana-mana penutupan fungsi mengembalikan ralat, pembolehubah ralat keseluruhan akan ditetapkan dengan sewajarnya. Jika tidak, pembolehubah ralat akan menjadi sifar.
Kod ini jauh lebih bersih dan lebih ringkas daripada kod asal. Ia juga mengendalikan semua ralat sekaligus, menjadikannya lebih mudah untuk mengenal pasti ralat yang paling penting.
Atas ialah kandungan terperinci Bagaimana untuk Menangani Berbilang Ralat dengan Anggun dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!