自定义错误类型允许调用者使用类型断言检查错误的类别:
type MyError struct {
Message string
}
func (e MyError) Error() string {
return e.Message
}
func GenerateError() error {
return MyError{"example text"}
}
func main() {
err := GenerateError()
_, ok := err.(MyError)
fmt.Printf("%t\n", ok)
}
打印“ true”。
但是,在我看到的所有解释这种技术的示例中,人们都不是这样编写代码的。相反,它们将 pointers 传递给自定义错误类型:
type MyError struct {
Message string
}
func (e *MyError) Error() string {
return e.Message
}
func GenerateError() error {
return &MyError{"example text"}
}
func main() {
err := GenerateError()
_, ok := err.(*MyError)
fmt.Printf("%t\n", ok)
}
示例: gobyexample.com,this Medium article。
额外的间接访问有什么好处吗?为什么只是更复杂呢?