Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengembalikan Ralat jika Fungsi Go Panik?

Bagaimana untuk Mengembalikan Ralat jika Fungsi Go Panik?

Linda Hamilton
Linda Hamiltonasal
2024-11-12 00:39:03250semak imbas

How to Return an Error if a Go Function Panics?

Kembali dari Defer in Go

Anda menghadapi isu di mana anda ingin mengembalikan ralat jika fungsi panik dalam Go. Berikut ialah analisis dan pembetulan untuk kod anda:

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)
            switch x := r.(type) {
            case string:
                err = errors.New(x)
            case error:
                err = x
            default:
                err = errors.New("Unknown panic")
            }
            rep = nil // Invalidate rep
        }
    }()
    panic("Report format not recognized.")
    // rest of the getReport function...
}

Konsep Panik dan Tangguh

  • Panik: Isyarat panik ralat masa jalan yang boleh ditangkap oleh pemulihan dalam penangguhan fungsi.
  • Tangguhkan: Penyataan tangguh melambatkan pelaksanaan fungsi sehingga fungsi di sekeliling terkeluar.

Pengubahsuaian dalam Kod:

  • Fungsi tangguh kini menggunakan penyataan kes suis untuk mengendalikan nilai yang dipulihkan dengan betul.
  • Jika nilai yang dipulihkan ialah rentetan, ia ditukar kepada ralat menggunakan ralat.New().
  • Pembolehubah rep tidak sah selepas pertemuan ralat untuk memastikan ia tidak kembali sebarang data.
  • Pembolehubah rep dikembalikan sebagai sifar sekiranya berlaku ralat, yang sepadan dengan fungsi asal anda tandatangan.

Dengan perubahan ini, fungsi getReport anda akan mengembalikan ralat jika ia panik disebabkan format laporan yang tidak sah. Mesej ralat ialah sama ada nilai panik (jika rentetan) atau ralat generik yang menunjukkan panik yang tidak diketahui.

Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Ralat jika Fungsi Go 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