Rumah > Artikel > pembangunan bahagian belakang > Pengendalian ralat dalam Go: Cara menulis kod pengendalian ralat yang baik
Tidak kira bahasa pengaturcaraan yang anda gunakan, pengendalian ralat adalah bahagian penting. Dalam bahasa Go, terdapat mekanisme pengendalian ralat yang baik yang boleh membantu pengaturcara menangani ralat dan pengecualian dengan mudah. Artikel ini akan memberi tumpuan kepada cara menulis kod pengendalian ralat yang sangat baik untuk meningkatkan kualiti kod dan kestabilan program.
Dalam bahasa Go, ralat dianggap sebagai nilai biasa, yang boleh diproses dan diluluskan. Setiap fungsi mungkin mengembalikan nilai jenis ralat Jika ralat berlaku, ia akan mengembalikan nilai ralat bukan sifar, jika tidak ia akan mengembalikan sifar.
Jenis ralat dalam bahasa Go ialah ralat jenis antara muka terbina dalam, yang hanya mempunyai satu kaedah:
antara muka ralat taip {
Error() string
}
Antara muka ini Ralat kaedah () ditakrifkan, yang mengembalikan rentetan yang menunjukkan maklumat ralat.
Oleh itu, kita boleh menggunakan if err != nil untuk menentukan sama ada ralat berlaku Jika ralat berlaku, kita boleh mengendalikannya mengikut situasi tertentu. Dalam keadaan biasa, kami akan menggunakan pakej log untuk mengeluarkan maklumat log, mengembalikan maklumat ralat kepada pemanggil peringkat atas atau mengambil langkah tambahan untuk mengelakkan ralat daripada berulang.
2.1 Kembalikan maklumat ralat yang jelas
Mekanisme pengendalian ralat yang baik dalam bahasa Go boleh memberikan pengguna lebih banyak maklumat Clear mesej ralat membantu mereka mencari masalah dengan cepat. Oleh itu, semasa menulis program Go, sebaiknya berikan maklumat ralat yang jelas untuk setiap ralat supaya pengguna dapat mencari dan menyelesaikan masalah dengan cepat.
Contohnya:
jika _, err := os.Open(filePath != nil {
return fmt.Errorf("failed to open file %s: %v", filePath, err)
}
Dalam perkara di atas kod , menggunakan fmt.Errorf() untuk membalut mesej ralat, memberikan mesej ralat yang jelas: ralat berlaku semasa membuka fail, termasuk nama fail dan mesej ralat tertentu.
2.2 Apabila anda tidak memerlukan jenis ralat tertentu, gunakan ralat.New() untuk mencipta ralat
Dalam bahasa Go, sangat mudah untuk menggunakan ralat.New() untuk mencipta kesilapan. Jika kami perlu mengembalikan ralat yang tidak mengandungi maklumat khusus, kami boleh menggunakan ralat.New() untuk mencipta ralat baharu.
Contohnya:
mengembalikan ralat.Baru("sesuatu yang tidak kena")
2.3 Elakkan ralat bersarang
Apabila mengendalikan ralat, anda mungkin menghadapi To kes ralat bersarang, iaitu satu ralat boleh membawa kepada ralat yang lebih besar. Pada masa ini, kita perlu mengendalikan ralat dengan berhati-hati untuk mengelakkan ralat bersarang.
Salah satu cara untuk mengelakkan ralat bersarang ialah memisahkan fungsi yang ralat bersarang mungkin berlaku kepada fungsi lain yang mengendalikan semua ralat.
Contohnya:
func doSomething() ralat {
if _, err := os.Open(filePath); err != nil { return fmt.Errorf("failed to open file %s: %v", filePath, err) } // do something return nil
}
func main() {
if err := doSomething(); err != nil { log.Fatalf("failed to do something: %v", err) }
}
Dalam kod di atas, kami menguraikan fungsi doSomething() di mana ralat mungkin berlaku kepada dua fungsi, mengelakkan masalah ralat bersarang dan menjadikan kod lebih jelas dan lebih mudah difahami.
2.4 Apabila ralat berlaku pada berbilang baris, gunakan koma bertitik untuk memisahkannya
Dalam bahasa Go, ralat biasanya menduduki berbilang baris Pada masa ini, koma bertitik harus digunakan untuk memisahkan ralat untuk membuatnya jelas dan mudah dibaca.
Contohnya:
jika nilai d34c274c27b7f282989c434e8ef38bc5
return fmt.Errorf( "value %d is out of range [%d, %d]; %s", value, minValue, maxValue, errAdditionalInfo)}Dalam kod di atas, kami menggunakan titik koma. Ralat berbilang baris dipisahkan untuk menjadikan mesej ralat lebih jelas dan mudah dibaca.
if _, err := os.Open(filePath); err != nil { panic(fmt.Sprintf("failed to open file %s: %v", filePath, err)) } // do something}Dalam kod di atas, jika ralat berlaku semasa membuka fail, atur cara akan berhenti serta-merta Laksanakan dan buang pengecualian. Sebaliknya, fungsi recover() boleh menyambung semula pelaksanaan program selepas panik program. Fungsi recover() hanya boleh digunakan dalam fungsi defer, yang digunakan untuk menangkap panik dan menghentikan panik daripada berlalu ke lapisan luar. Contohnya: func main() {
defer func() { if err := recover(); err != nil { log.Fatalf("recover from panic: %v", err) } }() doSomething()}Dalam kod di atas, kami menggunakan fungsi defer plus recover() untuk memulihkan pelaksanaan program. Apabila program panik, fungsi recover() akan dipanggil dalam fungsi tangguh untuk menangkap maklumat ralat panik dan mencetak.
Atas ialah kandungan terperinci Pengendalian ralat dalam Go: Cara menulis kod pengendalian ralat yang baik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!