Go语言中的错误处理

一、错误

  • 在程序执行过程中出现的不正常情况称为错误
  • Go语言中使用builtin包下error接口作为错误类型,官方源码定义如下
    • 只包含了一个方法,方法返回值是string,表示错误信息
// The error built-in interface type is the conventional interface for
// representing an error condition, with the nil value representing no error.
type error interface {
	Error() string
}
  • Go语言中错误都作为方法/函数的返回值,因为Go语言认为使用其他语言类似try…catch这种方式会影响到程序结构
  • 在Go语言标准库的errors包中提供了error接口的实现结构体errorString,并重写了error接口的Error()方法.额外还提供了快速创建错误的函数
package errors

// New returns an error that formats as the given text.
func New(text string) error {
	return &errorString{text}
}

// errorString is a trivial implementation of error.
type errorString struct {
	s string
}

func (e *errorString) Error() string {
	return e.s
}

如果错误信息由很多变量(小块)组成,可以借助fmt.Errorf(“verb”,…)完成错误信息格式化,因为底层还是errors.New()

// Errorf formats according to a format specifier and returns the string
// as a value that satisfies error.
func Errorf(format string, a ...interface{}) error {
	return errors.New(Sprintf(format, a...))
}

二、自定义错误

使用Go语言标准库创建错误,并返回

func demo(i, k int) (d int, e error) {
	if k == 0 {
		e = errors.New("初始不能为0")
		d=0
		return
	}
	d = i / k
	return
}

func main() {
	result,error:=demo(6,0)
	fmt.Println(result,error)
}

如果错误信息由多个内容组成,可以使用下面实现方式

func demo(i, k int) (d int, e error) {
	if k == 0 {
		e = fmt.Errorf("%s%d和%d", "除数不能是0,两个参数分别是:", i, k)
		d = 0
		return
	}
	d = i / k
	return
}

func main() {
	result, error := demo(6, 0)
	fmt.Println(result, error)
}

三、Go语言中错误处理方式

可以忽略错误信息,使用占位符

func demo(i, k int) (d int, e error) {
	if k == 0 {
		e = fmt.Errorf("%s%d和%d", "除数不能是0,两个参数分别是:", i, k)
		d = 0
		return
	}
	d = i / k
	return
}

func main() {
	result, _ := demo(6, 0)
	fmt.Println(result)
}

使用if处理错误,原则上每个错误都应该解决

func demo(i, k int) (d int, e error) {
	if k == 0 {
		e = fmt.Errorf("%s%d和%d", "除数不能是0,两个参数分别是:", i, k)
		d = 0
		return
	}
	d = i / k
	return
}

func main() {
	result, error := demo(6, 0)
	if error != nil {
		fmt.Println("发生错误", error)
		return
	}
	fmt.Println("程序执行成功,结果为:", result)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值