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.
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 jenisif 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 } }
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.is
和 errors.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!