我正在尝试在 Go 中创建一个自定义错误,以便我可以使用自定义消息创建该错误的新实例,然后处理该特定类型的错误。但是,当我尝试这样做时,我的覆盖errors.Is()不会被执行。这是我的代码:
package main
import (
"fmt"
"errors"
)
type Error struct {
Message string
Code int
}
func (e *Error) Error() string {
return e.Message
}
func (e Error) Is(target Error) bool {
// This is never printed - this method never excutes for some reason
fmt.Println("compared!")
return e.Code == target.Code
}
var NotFoundError *Error = &Error{Code: 404, Message: "The page was not found"}
func NewError(errorType *Error, message string) error {
rc := *errorType
rc.Message = message
return &rc
}
func FetchImage() error {
return NewError(NotFoundError, "That image is gone")
}
func main() {
err := FetchImage()
// Returns false
fmt.Println(errors.Is(err, NotFoundError))
}
在这种情况下,调用errors.Is()返回 false。然而,即使我提供了自己的 Is() 函数,该函数根本没有被调用。也就是说,"compared!"永远不会打印字符串。
为什么我的 Is() 函数没有按预期工作?
慕哥6287543
犯罪嫌疑人X
潇湘沐
随时随地看视频慕课网APP
相关分类