golang标准库错误处理及自定义错误处理示例

  1. 标准错误定义
Go 复制代码
// 定义错误
var custError = fmt.Errorf("这是一个格式化的错误信息:错误码:%v", 999)
  1. 在函数中返回错误
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
}
  1. 测试错误输出
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)
	}
相关推荐
cen__y28 分钟前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手32 分钟前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
GetcharZp1 小时前
GitHub 2.4 万 Star!D2 正在重新定义程序员画图方式
后端
社交怪人1 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生2 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS2 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣2 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye100862 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
AI科技星2 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
审判长烧鸡2 小时前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go