Go语言的标准库提供了一个接口error
来表示错误信息,该接口只有一个方法Error()
,返回一个字符串表示错误信息。一般情况下,错误信息字符串中已经包含了足够的信息来描述错误的原因和背景。但对于某些场景,如果需要更多的信息(例如错误码),可以考虑以下几种方式:
- 通过自定义错误类型来携带更多信息
可以定义一个结构体类型来实现error
接口,然后在该结构体中添加相应的字段来携带更多信息。比如:
type MyError struct {
ErrorCode int
Message string
}
func (e *MyError) Error() string {
return fmt.Sprintf("%d: %s", e.ErrorCode, e.Message)
}
这样就可以把错误码和错误信息一起传递了。
- 在错误信息字符串中包含更多信息
在错误信息字符串中添加更多的信息也是常用的方法。比如:
func MyFunc() error {
return fmt.Errorf("Error occurred. Error code: %d", 123)
}
这样就可以在错误信息中添加额外的错误码信息。
- 使用结构体来返回错误信息和错误码等相关信息
在某些复杂的场景下,将错误信息和错误码等相关信息封装成一个结构体,一起返回也是一种不错的选择。比如:
type MyErrorResult struct {
ErrorCode int
ErrorMessage string
// 其他相关信息
}
func MyFunc() (*MyErrorResult, error) {
// 逻辑代码
if err != nil {
return &MyErrorResult{ErrorCode: 123, ErrorMessage: "Error occurred."}, err
}
// 更多代码
}
这样就可以在error
接口中返回自定义结构体,从而携带更多的信息。