Ralat.Is nampaknya tidak berfungsi apabila saya mempunyai struktur ralat yang mengandungi kepingan bersarang di dalamnya:
package main import ( "errors" "fmt" "os" ) type Response struct { Details []string } type ErrResponseError struct { Response Response } func (err ErrResponseError) Error() string { return "response error" } func main() { err := ErrResponseError{} fmt.Fprintf(os.Stdout, "equal: %v", errors.Is(err, ErrResponseError{})) }
Kembali
equal: false
package main import ( "errors" "fmt" "os" ) type Response struct { Details string // Changed this line } type ErrResponseError struct { Response Response } func (err ErrResponseError) Error() string { return "response error" } func main() { err := ErrResponseError{} fmt.Fprintf(os.Stdout, "equal: %v", errors.Is(err, ErrResponseError{})) }
Kembali
equal: true
................................................. ............... ................................... ................................... ................ ................................................... ....... .............................................. ................................... ................ ................................................... .....
Dari dokumentasi:
Jadi, anda boleh melakukannya dengan menulis kaedah Is
untuk membandingkan dua keping.
Algoritma perbandingan ralat lalai menyemak sama ada ralat adalah sama dengan sasaran. Memandangkan ralat anda mengandungi kepingan, ia tidak dapat dibandingkan.
Atas ialah kandungan terperinci kesilapan. Mengembalikan palsu jika ia mengandungi kepingan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!