Golang ialah bahasa pembangunan yang cekap, serentak dan ringkas dengan kebolehbacaan dan kebolehselenggaraan yang baik. Walau bagaimanapun, kadangkala walaupun dalam bahasa sedemikian, ralat yang tidak dijangka berlaku dalam kod, seperti: tatasusunan di luar sempadan, penuding nol, atau ranap sistem, dsb. Untuk menangani masalah ini, Go menyediakan kaedah pemprosesan yang mudah: panik.
1. Apa itu panik?
Panik ialah fungsi terbina dalam yang digunakan untuk menunjukkan bahawa ralat tidak dapat dipulihkan telah berlaku dalam atur cara. Apabila fungsi panik dipanggil, atur cara menghentikan aliran semasa dan melemparkan ralat, kemudian berhenti berjalan dan menamatkan timbunan panggilan.
2. Bagaimana cara menggunakan panik?
Panik mudah digunakan. Hanya buang ralat terus melalui fungsi panic()
. Contohnya:
func app() { if err := someFunction(); err != nil{ log.Printf("operation failed, error - %s", err.Error()) panic(err) } // 其他代码 }
Jika someFunction()
ralat berlaku, aplikasi akan berhenti berjalan dan membuang panic err
mesej ralat.
Dalam kod contoh di atas, apabila ralat berlaku dalam fungsi, kami mencetak butiran ralat dan menyerahkannya kepada fungsi panik. Ini akan menyebabkan atur cara menghentikan paksa dan mencetak mesej ralat pada konsol. Dalam kes ini, maklumat ralat khusus akan dicetak, dan aplikasi akan berhenti berjalan dan tidak akan terus melaksanakan kod berikutnya. Pada masa ini, mekanisme menangkap ralat perlu diperkenalkan ke dalam kod untuk memastikan ketepatan aplikasi.
3 Hubungan antara panik dan Pulih
Jika panik digunakan dalam kod, semua kod dalam timbunan panggilan akan berhenti berjalan, program akan berhenti dan mesej ralat akan dikeluarkan , yang akan memberi kesan negatif kepada program. Oleh itu, dalam bahasa Go, penggunaan panik dan pulih berpasangan boleh menjadikan program lebih mantap.
Fungsi panik hanya akan menghentikan pelaksanaan program dalam fungsi yang memanggilnya secara langsung. Kemudian pada timbunan panggilan fungsi, apabila pengecualian mencapai bahagian atas timbunan panggilan, ia akan menamatkan perjalanan program.
recover mempunyai keupayaan untuk memulihkan operasi sistem, ia hanya boleh dipanggil dalam fungsi kelewatan. Fungsi pulih adalah untuk memintas pengecualian panik dan memulihkan operasi sistem.
Jika tiada panik sebelum memanggil fungsi pulih, maka pulih tidak akan melakukan apa-apa.
Mari kita lihat contoh berikut:
func recoverDemo() { defer func() { if r := recover(); r != nil { fmt.Println("recover from panic", r) } }() panic("something wrong") fmt.Println("After panic") }
Dalam contoh ini, fungsi selepas kata kunci tangguh akan dilaksanakan sebelum fungsi tamat. Jika panik berlaku semasa pelaksanaan fungsi, kaedah pemulihan akan diaktifkan selepas mencapai ungkapan penangguhan. Ia akan menangkap panik dan mencetak mesej yang kami sampaikan.
Di Golang, recover biasanya digunakan untuk pulih daripada panik. Biasanya, semasa proses pembangunan, kami berharap program itu tidak akan berhenti dalam keadaan tertentu, walaupun pengecualian berlaku dalam fungsi, yang memerlukan kami menggunakan fungsi pulih untuk pulih.
4. Amalan terbaik
Untuk mengelakkan ranap program yang disebabkan oleh panggilan panik, kami harus mencuba yang terbaik untuk menangkap pengecualian ini dan menggunakan pulih untuk pulih apabila sesuai. Dalam amalan saya, saya biasanya mengikuti prinsip berikut apabila menggunakan panik:
1 Pastikan ia mudah
panik tidak boleh disalahgunakan dalam kod dan hanya boleh digunakan apabila ralat yang benar-benar tidak dapat dipulihkan berlaku. Dalam kes lain, mekanisme pengendalian ralat harus digunakan.
2. Gunakan fungsi tangguh dengan betul
Kami biasanya menggunakan fungsi tangguh untuk mengendalikan pembersihan penggunaan sumber. Walau bagaimanapun, apabila menggunakan panik dan pulih, lokasi penangguhan pelaksanaan adalah sangat penting. Panggil pulih dalam fungsi tangguh untuk menangkap dan mengendalikan pengecualian panik.
3. Gunakan ralat piawai
Mekanisme ralat piawai di Golang sangat berguna. Jika ralat berlaku, kita harus menggunakan pembolehubah jenis ralat untuk menghantar maklumat ralat, dan menentukan sama ada ralat berlaku dengan menentukan sama ada pembolehubah itu tiada.
Atas ialah kandungan terperinci penggunaan panik golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!