Adakah salah menggunakan penegasan jenis untuk pengendalian ralat?

WBOY
Lepaskan: 2024-02-10 10:24:09
ke hadapan
895 orang telah melayarinya

Adakah salah menggunakan penegasan jenis untuk pengendalian ralat?

Menggunakan penegasan jenis untuk pengendalian ralat adalah amalan biasa, tetapi sama ada ia ralat atau tidak bergantung pada situasi. Penegasan jenis boleh digunakan untuk mengesahkan bahawa jenis parameter yang diluluskan dalam memenuhi jangkaan, dengan itu menangkap ralat dalam kod lebih awal. Walau bagaimanapun, ia boleh menyebabkan masalah jika pengendalian ralat bergantung pada penegasan jenis dan mengabaikan kemungkinan pengecualian lain. Oleh itu, apabila menggunakan penegasan jenis untuk pengendalian ralat, anda perlu mempertimbangkan secara menyeluruh logik dan kebolehpercayaan kod, dan memastikan bahawa pelbagai pengecualian dikendalikan dengan betul untuk memastikan kestabilan dan kebolehselenggaraan kod.

Kandungan soalan

Saya tertanya-tanya mengapa pengendalian ralat gaya penegasan suis + taip tidak digunakan/disyorkan lebih dalam golang. apa salahnya? Atau adakah masyarakat langsung tidak mempedulikannya?

Contohnya kod berikut:

if err != nil {
    if errors.as(err, &queryerr{}) {
        log.println("query error : ", err)
        return http.statusinternalservererror
    } else if errors.as(err, &querydataextractionerr{}) {
        return http.statusnotfound
    } else {
        log.println(err.error())
        return http.statusinternalservererror
    }
}
Salin selepas log masuk

boleh ditulis sebagai:

suis jenis
if err != nil {
    switch err.(type) {
    case QueryErr:
        log.Println("query error : ", err)
        return http.StatusInternalServerError
    case QueryDataExtractionErr:
        return http.StatusNotFound
    default:
        log.Println(err.Error())
        return http.StatusInternalServerError
    }
}
Salin selepas log masuk

Penyelesaian

adalah betul dari segi teknikal. Walau bagaimanapun, penukaran jenis yang salah boleh menyalahtafsirkan ralat yang dibalut. Contohnya:

err:=io.EOF
err1 := fmt.Errorf("Unexpected error: %w",err)
Salin selepas log masuk

Di atas, err1.(io.eof) 会失败,但 errors.is(err1,io.eof) tidak akan.

Oleh itu, anda harus menggunakan errors.iserrors.as untuk menguji sama ada ralat yang anda ada mengandungi ralat yang anda cari.

Atas ialah kandungan terperinci Adakah salah menggunakan penegasan jenis untuk pengendalian ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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