Go 错误处理

package main

import (
	"errors"
	"fmt"
)

// 按照惯例,错误通常是最后一个返回值并且是 error 类型
func f1(arg int) (int, error) {
	if arg == 42 {
		//errors.New 使用给定的错误信息构造一个基本的 error 值
		return -1, errors.New("can not work whit 42")
	}
	//返回错误值为 nil 代表没有错误
	return arg + 3, nil
}

// 通过实现 Error() 方法来自定义 error 类型。 这里使用自定义错误类型来表示上面例子中的参数错误
type defError struct {
	arg  int
	prob string
}

func (de *defError) Error() string {
	//fmt.Sprintf 来格式化字符串
	return fmt.Sprintf("%d - %s", de.arg, de.prob)
}

// 使用 &argError 语法来建立一个新的结构体, 并提供了 arg 和 prob 两个字段的值
func f2(arg int) (int, error) {
	if arg == 42 {
		return -1, &defError{arg, "can not work with it"}
	}
	return arg + 3, nil
}

func main() {
	//下面的两个循环测试了每一个会返回错误的函数。 注意,在 if 的同一行进行错误检查,是 Go 代码中的一种常见用法
	for _, a := range []int{3, 42} {
		if re, p := f1(a); p != nil {
			fmt.Println("f1 fail:", p)
		} else {
			fmt.Println("f1 work:", re)
		}
	}

	for _, a := range []int{3, 42} {
		if re, p := f2(a); p != nil {
			fmt.Println("f2 fail:", p)
		} else {
			fmt.Println("f2 work:", re)
		}
	}
	//如果你想在程序中使用自定义错误类型的数据, 你需要通过类型断言来得到这个自定义错误类型的实例
	_, r := f2(42)
	//类型断言value.(type)
	if d, ok := r.(*defError); ok {
		fmt.Println(d.arg)
		fmt.Println(d.prob)
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值