Di Golang, sistem pengecualian yang terdapat dalam hampir setiap bahasa telah dialih keluar sepenuhnya dan digantikan dengan kaedah pengendalian ralat yang lebih ringkas dan fleksibel. Artikel ini bertujuan untuk memperkenalkan kaedah pengendalian ralat dan amalan berkaitan di Golang.
Di Golang, jenis ralat ialah unit asas pengendalian ralat. Jenis ralat ialah jenis antara muka terbina dalam, ditakrifkan seperti berikut:
type error interface { Error() string }
Antara muka hanya mengandungi satu kaedah Error()
dan jenis pulangan ialah rentetan. Oleh itu, sebarang jenis yang melaksanakan antara muka ini boleh digunakan sebagai jenis ralat.
Pustaka standard Golang mengandungi pakej errors
yang boleh digunakan untuk mencipta ralat mudah dengan cepat:
import "errors" func main() { err := errors.New("some error occurred") fmt.Println(err) }
Sudah tentu, kami juga boleh menyesuaikan jenis ralat:
type MyError struct { message string } func (e *MyError) Error() string { return fmt.Sprintf("MyError: %v", e.message) }
Di Golang, pengendalian ralat konvensional termasuk dua kaedah: mengembalikan ralat dan panik. Oleh itu, apabila ralat berlaku, kami biasanya mempunyai dua cara berikut untuk mengendalikannya:
2.1 Mengembalikan ralat
Biasanya, kami akan menggunakan ralat sebagai nilai pulangan fungsi untuk pemanggil untuk mengendalikan. Contohnya:
func divide(a, b int) (int, error) { if b == 0 { return 0, errors.New("division by zero") } return a / b, nil } func main() { result, err := divide(6, 2) if err != nil { log.Fatal(err) } fmt.Println(result) }
Fungsi ini mengembalikan ralat sebagai nilai pulangan kedua. Apabila memanggil fungsi ini, kami biasanya terlebih dahulu menentukan sama ada ralat itu kosong, dan jika tidak, lakukan pengendalian ralat yang sepadan.
2.2 Panik
Dalam sesetengah kes, apabila atur cara mempunyai ralat yang tidak boleh dipulihkan, kita boleh menggunakan kata kunci panic
untuk membuang pengecualian program. Pada ketika ini, program akan menghentikan pelaksanaan dan mencetak mesej ralat yang sepadan.
func checkName(name string) { if name == "" { panic("name can not be empty") } } func main() { name := "" checkName(name) // other actions }
Dalam kod di atas, apabila name
kosong, atur cara akan membuang pengecualian dan menghentikan pelaksanaan.
Untuk memastikan kebolehbacaan dan kebolehselenggaraan kod, kita perlu mengikuti beberapa amalan terbaik pengendalian ralat.
3.1 Elakkan menyalahgunakan Panic
Di Golang, Panic hanya digunakan untuk mengendalikan ralat yang tidak boleh dipulihkan. Oleh itu, semasa menulis kod, sama ada anda membuang panic
atau menangkap panic
sendiri, anda harus merawatnya dengan berhati-hati. Cuba hadkan penggunaan panic
kepada situasi abnormal yang tidak terkawal.
3.2 Kembalikan kod ralat
Dalam sesetengah kes, ralat boleh diwakili dengan mengembalikan kod ralat. Contohnya, kod ralat 404 Not Found
, 500 Internal Server Error
, dsb. dalam permintaan HTTP. Mengembalikan kod ralat boleh menyampaikan maklumat ralat dengan berkesan, tetapi anda juga perlu memberi perhatian kepada reka bentuk kod ralat. Kod ralat harus mempunyai atribut unik, boleh dikenal pasti, boleh dibaca dan lain-lain.
3.3 Kembalikan perihalan ralat
Apabila ralat berlaku dalam fungsi, mengembalikan penerangan ralat terperinci boleh membantu pengguna mencari lokasi dan punca ralat dengan cepat. Anda juga boleh menyesuaikan jenis ralat untuk mencapai penerangan ralat yang lebih khusus.
type MyError struct { message string location string } func (e *MyError) Error() string { return fmt.Sprintf("Error occurred in %s: %s", e.location, e.message) }
Di Golang, pengecualian dikeluarkan sepenuhnya, dan pengendalian ralat diberikan amalan yang lebih fleksibel dan ringkas. Pengendalian dan penyampaian maklumat ralat yang betul boleh memastikan kestabilan dan kebolehselenggaraan program. Mengikuti amalan terbaik pengendalian ralat di atas boleh membantu kami menulis kod yang lebih mantap, boleh dipercayai dan boleh dibaca.
Atas ialah kandungan terperinci Kaedah pengendalian ralat dan amalan berkaitan di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!