Errors

描述

error本质上是一个接口,任何实现该接口的结构体都是error。

type error interface {
	Error() string
}

使用

func f1(arg int) (float64, error) {
	if arg == 0 {
		return 0, errors.New("can't work with 0")
	}
	return 1 / float64(arg), nil
}

这是一个计算倒数的方法。如果传入的参数是0,那么返回error。

arg1 := 10
r1, e1 := f1(arg1)
fmt.Println("arg:", arg1, "return:", r1, "error:", e1)
arg2 := 0
r2, e2 := f1(arg2)
fmt.Println("arg:", arg2, "return:", r2, "error:", e2)

arg: 10 return: 0.1 error:
arg: 0 return: 0 error: can’t work with 0

自定义error

任何实现error接口方法的构造体都可作为error使用。

type ArgError struct {
	arg  int
	prob string
}

func (e *ArgError) Error() string {
	return fmt.Sprintf("%d - %s", e.arg, e.prob)
}
func f1(arg int) (float64, error) {
	if arg == 0 {
		return 0, errors.New("can't work with 0")
	}
	return 1 / float64(arg), nil
}

func f2(arg int) (float64, error) {
	if arg == 0 {
		return 0, &ArgError{arg, "can't work with it"}
	}
	return 1 / float64(arg), nil
}
arg1 := 0
r1, e1 := f1(arg1)
fmt.Println("arg:", arg1, "return:", r1, "error:", e1)

arg2 := 0
r2, e2 := f2(arg2)
fmt.Println("arg:", arg2, "return:", r2, "error:", e2)

arg: 0 return: 0 error: can’t work with 0
arg: 0 return: 0 error: 0 - can’t work with it

如果需要自定义error,可以转换。

arg := 0
_, e := f2(arg)
ae, ok := e.(*ArgError)
fmt.Println("is ArgError:", ok, "arg:", ae.arg, "prob:", ae.prob)

is ArgError: true arg: 0 prob can’t work with it

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值