Konteks:
Dalam kod yang disediakan:
<code class="go">func sub(){ defer func (){ panic(2) }() panic(1) } func main(){ defer func(){ x:=recover() println(x.(int)); }() sub() }</code>
Nampaknya panik pertama (panik(1)) "ditulis ganti" oleh panik kedua (panik(2)).
Adalah ia Boleh Diterima?
Di Golang, panik daripada fungsi tertunda bukanlah keadaan yang berbeza atau luar biasa. Ia hanya menunjukkan bahawa urutan panik akan berterusan.
Seperti yang ditunjukkan dalam kod contoh, adalah dibenarkan untuk memanggil fungsi Golang yang mungkin panik dalam fungsi tangguh. Walaupun panik sudah berlaku, panik dalam fungsi penangguhan boleh diterima.
Mekanisme:
Mengikut spesifikasi Go:
"Jika D kembali seperti biasa, tanpa memulakan panik baharu, urutan panik berhenti."
Dalam contoh, fungsi tertunda (D) kembali tanpa mencetuskan panik baharu. Oleh itu, urutan panik yang dimulakan oleh panik(1) dihentikan.
Pertimbangan Tambahan:
Atas ialah kandungan terperinci Bolehkah Anda Panik Dalam Fungsi Penangguhan Semasa Panik Sedia Ada di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!