panic与recover函数

错误和异常是两个不同的概念

错误一般是导致代码直接运行不过

异常:一般指对函数逻辑有影响

如下代码:

package main

import (
	"fmt"
)

func div(a, b int) (int, error) {
	if b == 0 {
		panic("被除数不能为0")
	}
	return a / b, nil
}

func main() {
	//错误是遇到可能出现的情况,这些情况会导致你的代码出现问题,参数检查,数据库访问不了
	//data := 12
	//strconv.Itoa(data) //go认为这个Itoa的函数不可能出错 内部代码出错这个时候应该抛出异常
	//i, err := strconv.Atoi("12") //Atoi认为这个函数会出现一些预知的错误情况
	//if err != nil {
	//	//错误
	//}

	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("遗产被捕获到")
		}
	}()
	a := 12
	b := 0
	fmt.Println(div(a, b))
	//异常 go语言中如何抛出异常如何捕捉异常

}

关于协程中出现的panic与recove,子协程中无法拿到父协程中的异常信息

package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
		a := 10
		b := 10
		fmt.Println(a / b)
		panic("error")
		w.Write([]byte("hello world"))
	})
	http.ListenAndServe("127.0.0.1:8080", http.Handler(nil))

	//panic会引起主线程的挂掉,同时会引起其他协程挂掉
	//为什么panic不会报错呢,在父协程中无法捕获子协程中出现的异常
}

总结:go语言认为错误就要处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值