Rumah > pembangunan bahagian belakang > Golang > Pergi Pemulihan Panik: Menangguhkan `recover()` – Apakah Perbezaannya?

Pergi Pemulihan Panik: Menangguhkan `recover()` – Apakah Perbezaannya?

Patricia Arquette
Lepaskan: 2024-12-03 03:35:11
asal
552 orang telah melayarinya

Go Panic Recovery: Deferring `recover()` – What's the Difference?

Menunda recover() lwn. defer recover()

Dalam Go, panik boleh ditangkap dan dikendalikan menggunakan fungsi recover() . Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa peletakan tangguh berbanding dengan panggilan recover() mempunyai implikasi yang ketara.

Senario A: defer func() { recover() }()

Dalam senario ini, penyata tangguh menjadualkan fungsi tanpa nama untuk dilaksanakan pada penghujung fungsi semasa. Apabila fungsi ini dilaksanakan, ia memanggil fungsi recover(). Ini ialah cara yang berkesan untuk menangkap dan mengendalikan panik kerana fungsi recover() akan dilaksanakan walaupun panik berlaku sebelum fungsi lampiran menyambung semula pelaksanaan.

Senario B: defer recover()

Dalam senario ini, fungsi recover() itu sendiri dijadualkan sebagai fungsi tertunda. Walau bagaimanapun, ini tidak berfungsi seperti yang dimaksudkan kerana recover() tidak memanggil dirinya sendiri. Oleh itu, sebarang panik yang berlaku sebelum fungsi lampiran menyambung semula pelaksanaan tidak akan ditangkap oleh panggilan tertunda ini.

Tingkah laku ini didokumenkan dalam dokumentasi Go: "Jika pemulihan dipanggil di luar fungsi tertunda, ia tidak akan menghentikan a urutan panik."

Contoh Menarik: defer (func() { recover() })()

Untuk menggambarkan perkara ini dengan lebih lanjut, pertimbangkan kod berikut:

var recover = func() { recover() }
defer recover()
panic("panic")
Salin selepas log masuk

Anehnya, kod ini juga tidak panik. Dalam kes ini, kami mencipta pembolehubah pulih jenis fungsi dan memulakannya kepada fungsi tanpa nama yang memanggil recover() terbina dalam. Kami kemudiannya menentukan nilai pembolehubah pulih sebagai fungsi tertunda. Ini membolehkan kami menangkap dan mengendalikan panik kerana fungsi tertunda secara berkesan memanggil recover(), menghentikan urutan panik.

Atas ialah kandungan terperinci Pergi Pemulihan Panik: Menangguhkan `recover()` – Apakah Perbezaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan