可以通过在自定义类型上实现 Error() 方法来使用自定义类型作为 error 。以下示例是对上面示例的变体,它使用自定义类型来明确表示参数错误。
|
|
|
package main
|
|
import (
"errors"
"fmt"
)
|
自定义错误类型通常以“Error”结尾。
|
type argError struct {
arg int
message string
}
|
添加此 Error 方法使 argError 实现 error 接口。
|
func (e *argError) Error() string {
return fmt.Sprintf("%d - %s", e.arg, e.message)
}
|
|
func f(arg int) (int, error) {
if arg == 42 {
|
返回我们的自定义错误。
|
return -1, &argError{arg, "can't work with it"}
}
return arg + 3, nil
}
|
|
func main() {
|
errors.As 是 errors.Is 的更高级版本。它检查给定错误(或其链中的任何错误)是否与特定错误类型匹配,并将其转换为该类型的值,返回 true 。如果没有匹配,则返回 false 。
|
_, err := f(42)
var ae *argError
if errors.As(err, &ae) {
fmt.Println(ae.arg)
fmt.Println(ae.message)
} else {
fmt.Println("err doesn't match argError")
}
}
|