Rumah >pembangunan bahagian belakang >Golang >Bolehkah Penyata Tangguh Digunakan untuk Memanipulasi Nilai Pulangan dalam Fungsi Panik?

Bolehkah Penyata Tangguh Digunakan untuk Memanipulasi Nilai Pulangan dalam Fungsi Panik?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-12 17:18:01849semak imbas

Can Defer Statements Be Used to Manipulate Return Values in Panicked Functions?

Memanipulasi Nilai Pulangan dengan Tangguh

Dalam Go, penyataan penangguhan boleh digunakan untuk melaksanakan fungsi selepas fungsi sekeliling kembali. Mekanisme ini membolehkan anda mengendalikan tugas pembersihan atau melakukan tindakan walaupun ralat berlaku. Walau bagaimanapun, terdapat had apabila cuba mengembalikan nilai ralat daripada fungsi yang panik dan disertakan dalam pernyataan tangguh.

Pertimbangkan coretan kod berikut:

func getReport(filename string) (rep report, err error) {
    rep.data = make(map[string]float64)

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in f", r)
            err, _ = r.(error)
            return nil, err
        }
    }()
    panic("Report format not recognized.")
    // Remaining function code...
}

Niatnya ialah untuk mengembalikan ralat jika fungsi getReport panik. Walau bagaimanapun, pendekatan ini tidak berfungsi kerana fungsi tangguh tidak boleh mengubah bilangan nilai pulangan dalam fungsi sekeliling. Sebaliknya, mereka hanya boleh mengubah suai nilai parameter pulangan sedia ada.

Untuk menangani isu ini, fungsi tangguh harus mengubah suai parameter err return dan bukannya cuba mengembalikan nilai ralat baharu:

defer func() {
    if r := recover(); r != nil {
        fmt.Println("Recovered in f", r)
        // Find out the exact error type and set err
        switch x := r.(type) {
        case string:
            err = errors.New(x)
        case error:
            err = x
        default:
            err = errors.New("Unknown panic")
        }
        // Invalidate rep
        rep = nil
    }
}()

Dengan pengubahsuaian ini, fungsi tangguh mengemas kini parameter err return dan menetapkan rep kepada nil untuk menunjukkan keadaan ralat. Ini membolehkan fungsi sekeliling mengembalikan nilai ralat yang diubah suai.

Atas ialah kandungan terperinci Bolehkah Penyata Tangguh Digunakan untuk Memanipulasi Nilai Pulangan dalam Fungsi Panik?. 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