设计思路
- 定义新的错误类型:创建一个结构体类型来表示自定义错误,该结构体需要实现
BaseError
接口的 Error
方法以及新的 ErrorCode
方法。
- 在业务逻辑函数中使用:在复杂业务逻辑函数中,返回自定义错误。当捕获到错误时,先断言错误类型是否为自定义错误类型,如果是,则根据其
ErrorCode
返回值进行不同处理。
关键代码示例
package main
import (
"fmt"
)
// 定义基础错误接口
type BaseError interface {
Error() string
}
// 定义自定义错误结构体
type CustomError struct {
errorMsg string
errorCode int
}
// 实现BaseError接口的Error方法
func (ce CustomError) Error() string {
return ce.errorMsg
}
// 实现新的ErrorCode方法
func (ce CustomError) ErrorCode() int {
return ce.errorCode
}
// 复杂业务逻辑函数
func complexBusinessLogic() error {
// 模拟一些业务逻辑,这里简单返回一个自定义错误
return CustomError{
errorMsg: "这是一个自定义错误",
errorCode: 1001,
}
}
func main() {
err := complexBusinessLogic()
if err != nil {
if customErr, ok := err.(CustomError); ok {
switch customErr.ErrorCode() {
case 1001:
fmt.Println("处理错误码1001的逻辑")
case 1002:
fmt.Println("处理错误码1002的逻辑")
default:
fmt.Println("处理其他错误码的逻辑")
}
} else {
fmt.Println("不是自定义错误类型")
}
}
}