使用 Error.Is 函数比较动态错误消息
Compare dynamic error message using Error.Is function
例如我有一条动态错误消息
metadata.name: invalid value "test-value"
“测试值”将是动态的,如果出现此错误模式,我需要做一些事情
如何使用Error.Is函数检查错误模式?
你说你的错误有一条动态消息。我认为你的意思是你正在定义一个满足 error
接口的类型。 (不过,如果您使用 fmt.Errorf
,您 应该 为这个用例定义一个类型。
type invalidValueError struct {
value string
}
func (e *invalidValidError) Error() string {
return fmt.Sprintf("invalid value %q", e.value)
}
您可以使用 errors.As
检查任何给定错误是否属于此类型。这不仅会匹配错误本身,还会匹配它包含的任何错误。
if ive := (*invalidValueError)(nil); errors.As(err, &ive) {
// got an *invalidValueError
}
尽可能避免匹配错误消息的文本。它们可以在不同的系统或不同的区域设置中更改,并且它们通常不在兼容性承诺范围内。
例如我有一条动态错误消息
metadata.name: invalid value "test-value"
“测试值”将是动态的,如果出现此错误模式,我需要做一些事情
如何使用Error.Is函数检查错误模式?
你说你的错误有一条动态消息。我认为你的意思是你正在定义一个满足 error
接口的类型。 (不过,如果您使用 fmt.Errorf
,您 应该 为这个用例定义一个类型。
type invalidValueError struct {
value string
}
func (e *invalidValidError) Error() string {
return fmt.Sprintf("invalid value %q", e.value)
}
您可以使用 errors.As
检查任何给定错误是否属于此类型。这不仅会匹配错误本身,还会匹配它包含的任何错误。
if ive := (*invalidValueError)(nil); errors.As(err, &ive) {
// got an *invalidValueError
}
尽可能避免匹配错误消息的文本。它们可以在不同的系统或不同的区域设置中更改,并且它们通常不在兼容性承诺范围内。