Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Anda Panik Dalam Fungsi Penangguhan Semasa Panik Sedia Ada di Golang?

Bolehkah Anda Panik Dalam Fungsi Penangguhan Semasa Panik Sedia Ada di Golang?

Susan Sarandon
Susan Sarandonasal
2024-11-02 12:03:03357semak imbas

Can You Panic Within a Defer Function During an Existing Panic in Golang?

Adakah Panik Diterima Dalam Menangguhkan Fungsi, Terutamanya Apabila Panik Sudah Berlaku?

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:

  • Semua fungsi tertunda akan dilaksanakan, tidak kira sama ada ia menyebabkan panik .
  • Panik dalam fungsi tertunda akan "membungkus" panik sedia ada dan bukannya "menimpa"nya. Walau bagaimanapun, recover() hanya boleh mendapatkan semula nilai yang dihantar kepada panic() terbaharu.
  • Adalah mungkin untuk memulihkan dan mengendalikan nilai yang dihantar kepada berbilang panik dengan meletakkan fungsi tertunda dengan recover().

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!

Kenyataan:
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