Bagaimana Mengendalikan Panik dan Menangguhkan Pulangan dalam Fungsi Go?

DDD
Lepaskan: 2024-11-15 05:35:02
asal
317 orang telah melayarinya

How to Handle Panics and Defer Returns in Go Functions?

Menangguhkan Pulangan dalam Go

Dalam Go, pernyataan penangguhan membenarkan pelaksanaan fungsi ditangguhkan sehingga fungsi sekeliling kembali. Ini membolehkan tugas pembersihan dilaksanakan walaupun sekiranya berlaku panik, yang boleh berlaku apabila ralat tidak dapat dipulihkan berlaku semasa masa jalan.

Pertimbangkan coretan kod berikut yang cuba mengembalikan ralat daripada fungsi jika ia panik:

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.")
    // rest of the getReport function
}
Salin selepas log masuk

Walau bagaimanapun, kod ini tidak berfungsi seperti yang dimaksudkan. Penyataan pulangan dalam fungsi tertunda hanya mengubah suai pembolehubah tempatan ralat dan wakil dalam fungsi dan sebenarnya tidak mengembalikannya di luar fungsi.

Untuk menyelesaikan isu ini, kita boleh menggunakan fungsi pulih dalam fungsi tertunda untuk dapatkan nilai panik dan tetapkan parameter err dengan sewajarnya. Selain itu, kita harus menyemak jenis nilai panik dan menukarnya kepada ralat jika perlu.

Berikut ialah kod yang dikemas kini:

defer func() {
    if r := recover(); r != nil {
        fmt.Println("Recovered in f", r)
        switch x := r.(type) {
        case string:
            err = errors.New(x)
        case error:
            err = x
        default:
            err = errors.New("Unknown panic")
        }
        rep = nil
    }
}()
Salin selepas log masuk

Kod ini memastikan bahawa parameter ralat ditetapkan kepada ralat yang sesuai berdasarkan nilai panik, dan ia juga membatalkan parameter wakil untuk menghalang pemulangan laporan yang tidak lengkap.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Panik dan Menangguhkan Pulangan dalam Fungsi 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan