Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Pemulihan Panik Mengubah Suai Pembolehubah Setempat dalam Huruf Fungsi dalam Go?

Bolehkah Pemulihan Panik Mengubah Suai Pembolehubah Setempat dalam Huruf Fungsi dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-10-31 09:18:02289semak imbas

Can Panic Recovery Modify Local Variables in Function Literals in Go?

Bolehkah Pemulihan Panik Mengubah Suai Pembolehubah Setempat dalam Literal Fungsi?

Dalam Go, apabila bekerja dengan nilai pulangan yang dinamakan, anda boleh menggunakan pernyataan tangguh untuk mengubah suai nilai sebelum mengembalikannya. Walau bagaimanapun, tingkah laku ini tidak konsisten apabila menggunakan pembolehubah tempatan dalam literal fungsi.

Pertimbangkan kod berikut:

<code class="go">func foo() (result int, err error) {
    defer func() {
        if e := recover(); e != nil {
            result = -1
            err = errors.New(e.(string))
        }
    }()
    bar()

    result = 100
    err = nil
    return
}

func bar() {
    panic("panic happened")
}</code>

Kod ini berfungsi seperti yang diharapkan, menetapkan hasil kepada -1 dan tersilap kepada a mesej ralat tersuai selepas pulih daripada panik. Walau bagaimanapun, jika kita menggunakan pembolehubah tempatan dalam literal fungsi, tingkah laku berubah:

<code class="go">func foo() (int, error) {
    var result int
    var err error
    defer func() {
        if e := recover(); e != nil {
            result = -1
            err = errors.New(e.(string))
        }
    }()
    bar()

    result = 100
    err = nil
    return result, err
}

func bar() {
    panic("panic happened")
}</code>

Dalam kes ini, keputusan ditetapkan semula kepada 0 dan bukannya -1. Ini kerana pernyataan tangguh dalam literal fungsi tidak boleh mengakses atau mengubah suai nilai pulangan yang dinamakan kerana ia tidak lagi dalam skop.

Seperti dalam dokumentasi Go, "... jika fungsi tertunda ialah literal fungsi dan fungsi sekeliling telah menamakan parameter hasil yang berada dalam skop dalam literal, fungsi tertunda boleh mengakses dan mengubah suai parameter hasil sebelum ia dikembalikan."

Oleh itu, adalah penting untuk menggunakan nilai pulangan yang dinamakan apabila mencuba untuk mengubah suainya menggunakan pernyataan tangguh dalam literal fungsi. Pembolehubah setempat dalam kes sedemikian tidak boleh diakses atau diubah suai.

Atas ialah kandungan terperinci Bolehkah Pemulihan Panik Mengubah Suai Pembolehubah Setempat dalam Huruf Fungsi dalam Go?. 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