go 错误处理

Golang 错误处理方式记录

最近在研究golang 发现go并不存在类似java的try catch finally 异常处理机制,这里记录一下go的错误处理方式

测试代码

  • 代码
package main

import "fmt"

func test1() {
	fmt.Println("test1: Before define deffer")
	defer func() { //定义错误处理
		fmt.Println("deffer: begin")
		err := recover() //获取错误信息
		fmt.Printf("recover: type=[%T] error=[%s]\r\n", err, err)
		fmt.Println("deffer: end")
	}()
	fmt.Println("test1: After define deffer")
	fmt.Println("test1: Before panic")
	panic("panic Error")              //抛出错误
	fmt.Println("test1: After panic") //不会执行
}
func main() {
	fmt.Println("main: Before call test1")
	test1()
	fmt.Println("main: After call test1")
}
  • 得到的输出
main: Before call test1
test1: Before define deffer
test1: After define deffer
test1: Before panic
deffer: begin
recover: type=[string] error=[panic Error]
deffer: end
main: After call test1

总结

  1. deffer 后的语句不会马上执行,是在函数将要执行结束前执行的
  2. go 使用recover()函数获取当前触发的“异常”
  3. go 使用panic()函数主动抛出一个"异常"
  4. 即使函数运行过程中没有发生任何异常,deffer后的语句依然会在函数结束前执行,但使用recover获取到的错误信息是nil
    例如:将上例中panic注释后得到的输出为
main: Before call test1
test1: Before define deffer
test1: After define deffer
test1: Before panic
test1: After panic //此处由于panic不存在 故该行也执行了
deffer: begin
recover: type=[<nil>] error=[%!s(<nil>)] //recover获取到的数据为nil
deffer: end
main: After call test1
  1. recover函数获取到的数据类型是string
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值