- 标准错误定义
Go
// 定义错误
var custError = fmt.Errorf("这是一个格式化的错误信息:错误码:%v", 999)
- 在函数中返回错误
Go
// 在函数中返回错误
func throwErr() error {
return custError //返回错误
}
3.自定义错误结构
Go
// 自定义错误结构
type custErrorStruct struct {
arg int //错误码
msg string //错误信息
}
4.为自定义错误结构实现方法
Go
// Error:实现结构方法Error
func (e custErrorStruct) Error() string {
return fmt.Sprintf("自定义错误结构:错误码:%d 错误信息: %s", e.arg, e.msg) //格式化错误信息
}
5.在函数中抛出自定义错误结构
Go
// 在函数中抛出自定义错误结构
func testCustErr(i int) (int, error) {
if i < 42 {
return i, custErrorStruct{arg: 1001, msg: "输入数值小于42"}
}
return i, nil
}
- 测试错误输出
Go
//错误处理
err := errors.New("程序出错错误了") //直接创建错误输出对象
fmt.Println("err:", err)
//在函数中返回错误信息
result, errmgs := myFunEmitError(-1, 2)
//如果函数处理出错,输出错误信息
if errmgs != nil {
fmt.Println("错误信息:===> :", errmgs, "值:", result)
}
//使用格式库处理错误信息
anErrA := fmt.Errorf("这是一个格式化的错误信息:错误码:%v", 999)
fmt.Println("anErrA", anErrA)
//错误信息内嵌
anErrBIncludeA := fmt.Errorf("包含错误信息anErrA的内容: %w", anErrA)
fmt.Println("anErrBIncludeA:===>", anErrBIncludeA)
//错误信息判断
errB := fmt.Errorf("这是一个格式化的错误信息:错误码:%v", 999)
fmt.Println("errB:", &errB, "anErrA", &anErrA)
if errors.Is(anErrA, errB) { //两个错误信息地址不一样
fmt.Println("错误信息匹配")
} else {
fmt.Println("===>错误信息不匹配")
}
//判断函数中返回的错误
if errors.Is(custError, throwErr()) {
fmt.Println("错误信息匹配")
}
//定义临时函数
checkValue := func(i int) (int, error) {
if i < 10 {
return 0, errors.New("输出值必须大于0")
} else {
return i * 5, nil
}
}
//遍历数组
for _, i := range []int{7, 42} {
//调用临时函数并返回值与错误
if r, e := checkValue(i); e != nil {
fmt.Println("===>值检测不通过:", e) //出错
} else {
fmt.Println("PASS:值检测通过:", r) //正确
}
}
//测试自定义错误结构
rettmp, errtmp := testCustErr(38)
if errtmp != nil {
fmt.Println(errtmp.Error(), rettmp)
}