GO语言基础教程(133)Go自定义错误信息之使用fmt包的Errorf()函数:Go错误处理翻身记:Errorf()让你的错误信息会“说话”

Go错误处理:Errorf让错误会说话

一、为什么你的错误信息像“天书”?

还记得刚开始学Go时,被各种“不明觉厉”的错误信息支配的恐惧吗?比如这种:

file open failed: error 2

看到这种错误,你内心是不是在咆哮:“错误2是什么鬼?!文件不存在?没权限?还是磁盘满了?”

传统错误处理最大的问题就在于:错误信息太抽象!就像给你一张写著“前方施工”的路牌,却不告诉你到底该左转、右转还是掉头。

而Go语言中的fmt.Errorf()函数,就是来解决这个痛点的。它就像给你的错误信息加了个“翻译官”,让冷冰冰的错误代码变成人话。

举个例子对比下:

// 改造前 - 谜语人错误
err := errors.New("error 2")

// 改造后 - 人话版错误
err := fmt.Errorf("文件打开失败: 文件路径 %s 不存在, 当前用户 %s 无访问权限", filepath, username)

看出区别了吗?第二个错误信息即使不看代码上下文,也能立刻明白问题出在哪里。

二、fmt.Errorf()基础:不只是字符串拼接

很多初学者以为fmt.Errorf()就是高级点的字符串拼接,那就大错特错了!它真正的价值在于格式化能力错误包装

2.1 基本语法其实很简单
func Errorf(format string, a ...interface{}) error

这个函数返回的是一个error类型,这意味着它可以和标准错误处理无缝集成:

result, err := SomeFunction()
if err != nil {
    return fmt.Errorf("调用SomeFunction失败: %v", err)
}
2.2 格式化动词:错误的“美颜相机”

fmt.Errorf()支持所有fmt包的标准格式化动词,常用的有:

  • %s:字符串
  • %d:整数
  • %v:默认格式的值(最常用)
  • %+v:打印结构体时会包含字段名
  • %#v:Go语法表示的值

来看个实际例子:

func Divide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("除法运算失败: 被除数 %d 除以零 (除数 %d)", a, b)
    }
    return a / b, nil
}

这样当除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值