在 Golang 中比较时出现错误
在Golang中进行比较操作时,有时会遇到一些错误。这些错误可能导致程序运行不正常或产生意想不到的结果。本文将通过php小编草莓的介绍,为大家解析在Golang中比较时可能出现的错误,并提供相应的解决方案。通过了解这些常见错误,我们可以更好地理解和使用Golang的比较操作,提高程序的稳定性和正确性。让我们一起来探索吧!
问题内容
今天我在尝试实现自定义错误时遇到了问题。我的服务有两种类型的错误:内部错误的常规错误和处理用户相关错误的用户错误。所以我有用于用户错误的结构,其中包含一些元数据和处理错误的函数。在此函数中,我对标准错误使用包装器。As 函数。但它的工作方式很奇怪:出于某种原因,它也将常见错误视为用户错误。 这是代码片段:
package main
import (
"errors"
"fmt"
)
type UserError struct {
Message string
}
func (u *UserError) Error() string {
return u.Message
}
func As(sourceError, targetError error) bool {
return errors.As(sourceError, &targetError)
}
func AsV2(sourceError error, targetError interface{}) bool {
return errors.As(sourceError, &targetError)
}
func IsUserError(err error) bool {
var userError *UserError
return errors.As(err, &userError)
}
func main() {
userError := errors.New("test Error")
var emptyError *UserError
fmt.Println(As(userError, emptyError))
fmt.Println(AsV2(userError, emptyError))
fmt.Println(IsUserError(userError))
}
登录后复制