Golang 错误处理

函数错误处理

1.通常函数是返回error值的,正常为nil。根据error值进行逻辑处理

package main

import (
	"fmt"
	"strconv"
)

func main() {
	//通常函数是返回error值的,正常为nil。根据error值进行逻辑处理
	parseBool, err := strconv.ParseBool("-1")

	if err != nil {
		fmt.Println(err) //strconv.ParseBool: parsing "-1": invalid syntax
	} else {
		fmt.Println(parseBool)
	}
}

2.有时候可能会用到painc抛出错误,就需要recover去接收错误。如果不是导致系统无法运行的bug,一般不建议使用painc

package main

import (
	"errors"
	"fmt"
	"runtime/debug"
)

func add() {
	//抛出
	panic(errors.New("我就是故意的"))
}

func main() {
	//defer 最后执行 相当于代码写在add下面
	defer func() {
		//
		err := recover()
		if err != nil {
			fmt.Println(err) //我就是故意的
            debug.PrintStack() //打印堆栈信息
		}
	}()
	add()
}

创建错误

1.errors.New(string) 创建错误
2.fmt.Errorf(p1,p2…) 创建错误 p1:格式 p2…:参数
3.自定义错误,有Error() string方法即可,可以通过switch + type 来匹配错误具体类型

package main

import (
	"errors"
	"fmt"
)

type MyError struct {
	Message string
	Age     int
}

func (m MyError) Error() string {
	return m.Message
}

func CreateErrorOne() error {
	return errors.New("this is error")
}

func CreateErrorTwo() error {
	return fmt.Errorf("这是第%d个error:%s", 2, "this is error")
}

func CreateMyError() error {
	return MyError{Message: "this is error"}
}

func main() {
	// errors.New(string) 创建错误
	fmt.Println(CreateErrorOne()) // this is error
	// fmt.Errorf(p1,p2...) 创建错误 p1:格式 p2...:参数
	fmt.Println(CreateErrorTwo()) // 这是第2个error:this is error

	//自定义错误,有Error() string方法即可,可以通过switch + type 来匹配错误具体类型
	err := CreateMyError()

	switch e := err.(type) {
	case MyError:
		fmt.Println("MyError:", e) // MyError: this is error
	default:
		fmt.Println(e)
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值