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

Susan Sarandon
Lepaskan: 2024-10-31 09:18:02
asal
303 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!