Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Mengendalikan Ralat dalam Go dengan Berkesan?
Pembangunan Dalam Go, pengelogan ralat merupakan kebimbangan yang penting. Artikel ini meneroka beberapa teknik standard yang digunakan untuk mengendalikan ralat dengan berkesan.
Mencipta pembolehubah ralat tetap, yang sering dinamakan dengan awalan "Err", ialah pendekatan yang mantap. Pembolehubah ini biasanya merangkum rentetan deskriptif yang sejajar dengan keadaan ralat tertentu. Contoh:
var ( ErrSomethingBad = errors.New("some string") ErrKindFoo = errors.New("foo happened") )
Jenis ralat, dilambangkan dengan akhiran "...Ralat", menyediakan cara yang lebih berstruktur untuk mewakili ralat. Ia terdiri daripada definisi jenis tersuai dengan medan atau kaedah pilihan untuk menyampaikan maklumat tambahan tentang ralat. Contoh:
type SomeError struct { // extra information, whatever might be useful to callers // (or for making a nice message in `Error()`) 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)) }
Menggunakan ralat.Baharu untuk menjana nilai ralat ad hoc boleh diterima untuk keadaan ralat generik yang tidak memerlukan perincian lanjut. Contoh:
func SomepackageFunction() error { return errors.New("not implemented") }
Memilih ralat yang sesuai yang ditakrifkan dalam pustaka standard, seperti io.EOF, boleh menjadi mudah dalam senario tertentu. Walau bagaimanapun, adalah lebih biasa untuk membuat ralat tersuai untuk keadaan ralat tertentu dalam pakej anda. Contoh:
func SomeFunc() error { return io.EOF }
Go membolehkan penciptaan antara muka ralat tersuai, seperti net.Error, yang memberi kuasa kepada pembangun untuk mentakrifkan gelagat dan kategori ralat tertentu. Contoh:
type Error interface { error Timeout() bool // Is the error a timeout? Temporary() bool // Is the error temporary? }
Dalam Go 1.13 dan ke atas, pembalut ralat membenarkan pelanjutan ralat sedia ada dengan konteks atau butiran tambahan. Pendekatan ini memudahkan penyebaran ralat dan membantu dalam analisis ralat. Contoh:
func SomepackageFunction() error { err := somethingThatCanFail() if err != nil { return fmt.Errorf("some context: %w", err) } }
Jenis ralat yang ditetapkan dalam Go membolehkan ujian yang boleh dipercayai bagi keadaan ralat. Pembangun boleh membandingkan ralat dengan pembolehubah yang dipratakrifkan atau menggunakan antara muka untuk menyemak tingkah laku ralat tertentu. Contoh:
err := somepkg.Function() if err == somepkg.ErrSomethingBad { // … } // or for an error type, something like: if e, ok := err.(somepkg.SomeError); ok && e.ExtraInfo > 42 { // use the fields/methods of `e` if needed }
Dalam Go 1.13 dan lebih baru, ralat.Is dan ralat.Sebagai fungsi menawarkan keupayaan ujian ralat yang dipertingkatkan dengan membuka bungkus dan memadankan ralat dengan berkesan.
Go menyediakan set alat serba boleh untuk pengendalian ralat, membolehkan pembangun memilih pendekatan yang paling sesuai berdasarkan keperluan. Dengan memanfaatkan teknik yang dibincangkan dalam artikel ini, anda boleh memastikan pengelogan ralat yang mantap dan kualiti kod yang dipertingkatkan dalam aplikasi Go anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Mengendalikan Ralat dalam Go dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!