Pengendali Ralat Standard dalam Go
Go mempunyai beberapa pendekatan idiomatik untuk pengendalian ralat:
1. Pembolehubah Ralat Tetap
var (
ErrSomethingBad = errors.New("some string")
ErrKindFoo = errors.New("foo happened")
)
Salin selepas log masuk
2. Jenis Ralat
type SomeError struct {
ExtraInfo int
}
func (e SomeError) Error() string { /* … */ }
Salin selepas log masuk
3. Ralat Ad Hoc
func SomepackageFunction() error {
return errors.New("not implemented")
}
Salin selepas log masuk
4. Ralat Perpustakaan Standard
func SomeFunc() error {
return io.EOF
}
Salin selepas log masuk
5. Antara Muka Ralat
type Error interface {
error
Timeout() bool
Temporary() bool
}
Salin selepas log masuk
6. Ralat Pembalut (Go 1.13 )
func SomepackageFunction() error {
err := somethingThatCanFail()
if err != nil {
return fmt.Errorf("some context: %w", err)
}
}
Salin selepas log masuk
Memilih Pendekatan yang Tepat
Kaedah pilihan ialah:
- Ralat tetap pembolehubah atau jenis ralat untuk ralat yang mungkin ingin diuji oleh pengguna khususnya.
- Ralat ad hoc atau ralat perpustakaan standard untuk ralat kecil yang tidak mungkin diuji.
- Ralat antara muka untuk ralat dengan gelagat atau sifat tertentu.
- Ralat terbungkus untuk menambah konteks kepada ralat sedia ada (Go 1.13 ).
Kelebihan:
-
Pembolehubah Ralat Tetap: Mudah untuk diuji dan dibandingkan.
- Jenis Ralat: Boleh dilanjutkan dengan maklumat tambahan untuk ralat pengendalian.
-
Ralat Ad Hoc: Ringkas untuk ralat kecil.
-
Antara Muka Ralat: Tegakkan tingkah laku ralat khusus dan memudahkan polimorfisme.
-
Ralat Terbungkus: Sediakan konteks tanpa membuat ralat tersuai jenis.
Bacaan Lanjut:
- [Effective Go on Errors](https://go.dev/doc/articles/errors)
- [The Go Blog: Ralat pengendalian dan Pergi](https://blog.golang.org/error-handling-and-go)
- [Dave Cheney: Memeriksa Ralat](https://dave.cheney.net/2016/04/07 /inspecting-errors)
- [Peter Bourgon: Pengaturcaraan dengan ralat](https://go.dev/blog/errors)
Atas ialah kandungan terperinci Apakah Amalan Terbaik untuk Mengendalikan Ralat dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!