Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah salah menggunakan penegasan jenis untuk pengendalian ralat?

Adakah salah menggunakan penegasan jenis untuk pengendalian ralat?

WBOY
WBOYke hadapan
2024-02-10 10:24:09890semak imbas

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
    }
}

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
    }
}

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)

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Teg tersuai YAML dalam GoArtikel seterusnya:Teg tersuai YAML dalam Go