Pengendalian Ralat dalam Go: Pendekatan Standard dan Idiomatik
Golang menggalakkan penggunaan pembolehubah ralat untuk menunjukkan berlakunya ralat. Walau bagaimanapun, tiada set pembolehubah ralat piawai yang dipratentukan. Sebaliknya, pembangun dinasihatkan untuk mengamalkan amalan idiomatik untuk mentakrif dan mengendalikan ralat.
Pembolehubah Ralat Tetap
Adalah perkara biasa bagi pakej untuk menentukan pembolehubah ralat tetap dengan nama bermula dengan awalan "Err". Pembolehubah ini biasanya digunakan untuk mewakili keadaan ralat tertentu, membolehkan pemeriksaan ralat mudah. Contohnya:
var ( ErrSomethingBad = errors.New("some string") ErrKindFoo = errors.New("foo happened") )
Jenis Ralat
Satu lagi pendekatan idiomatik ialah untuk mentakrifkan jenis ralat tersuai dengan mencipta struct yang melaksanakan antara muka ralat. Jenis ralat ini boleh mengandungi maklumat tambahan yang berkaitan dengan ralat, menjadikannya mudah untuk menyemak jenis ralat tertentu.
type SomeError struct { ExtraInfo int } type OtherError string func (e SomeError) Error() string { /* … */ } func (e OtherError) Error() string { return fmt.Sprintf("failure doing something with %q", string(e)) }
Nilai Ralat Ad Hoc
Dalam situasi di mana keadaan ralat tertentu tidak dijangka, adalah mungkin untuk mencipta nilai ralat baharu dengan segera menggunakan fungsi ralat.New(). Kaedah ini mengembalikan nilai ralat dengan mesej ralat tersuai.
func SomepackageFunction() error { return errors.New("not implemented") }
Menggunakan Ralat Standard
Go menyediakan set terhad ralat standard yang ditakrifkan dalam pakejnya. Ralat ini sering digunakan apabila melaksanakan antara muka atau mematuhi piawaian tertentu. Walau bagaimanapun, secara amnya disyorkan untuk menentukan ralat tersuai untuk keadaan ralat yang lebih khusus dalam pakej.
func SomeFunc() error { return io.EOF }
Antara Muka Ralat
Go juga membenarkan penciptaan antara muka ralat yang mentakrifkan tingkah laku ralat biasa. Antara muka ini membolehkan penyemakan ralat untuk sifat tertentu.
type Error interface { error Timeout() bool // Is the error a timeout? Temporary() bool // Is the error temporary? }
Ralat Membungkus dalam Go 1.13
Sejak Go 1.13, ralat sedia ada boleh dibalut dengan konteks atau maklumat tambahan. Ini memudahkan pengendalian ralat dengan menyediakan lebih banyak konteks kepada pengguna tanpa memerlukan jenis ralat tersuai yang meluas.
func SomepackageFunction() error { err := somethingThatCanFail() if err != nil { return fmt.Errorf("some context: %w", err) } }
Dengan mengikuti amalan idiomatik ini, pembangun boleh mengendalikan ralat dalam kod Go mereka dengan berkesan, memastikan pengendalian ralat yang jelas dan terurus mekanisme.
Atas ialah kandungan terperinci Bagaimanakah Amalan Idiomatic Go Menangani Pengendalian Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!