Go error 可以通过实现 error
接口来携带更多信息,例如错误码信息。
定义一个带错误码信息的错误类型:
type MyError struct {
code int
msg string
}
func (e MyError) Error() string {
return fmt.Sprintf("%s: %d", e.msg, e.code)
}
然后在返回错误时创建该类型的实例,并将错误码和错误信息传递给构造函数:
func doSomething() error {
return MyError{code: 123, msg: "something went wrong"}
}
在处理错误时,可以使用类型断言或类型判断来访问错误码信息:
err := doSomething()
if err != nil {
if e, ok := err.(MyError); ok {
fmt.Printf("error code: %d, error message: %s", e.code, e.msg)
} else {
fmt.Println(err)
}
}
使用这种方法,我们可以在错误信息中携带更多的上下文信息,以便在调试和维护代码时更容易理解发生了什么错误。