首页 > 其他分享 >Go异常处理

Go异常处理

时间:2024-01-22 15:56:57浏览次数:32  
标签:defer err 处理 panic func Go recover 异常

GO中引入的处理方式为:defer,panic,recover。GO中可以抛出一个panic的异常,然后再defer中通过recover捕获这个异常,然后正常处理。

func test() {
	//使用defer+recover 捕获异常 test函数出栈后defer修饰的函数会执行
	defer func() {
		err := recover() //recover()内置函数,可以捕获到异常
		if err != nil { //如果是true表示test函数内有异常发生
			fmt.Println("err=", err)
            //进行异常业务处理
            //......
		}
	}()
	num1 := 10
	num2 := 0
	res := num1 / num2
	//err= runtime error: integer divide by zero
	fmt.Println("res=", res)
}

自定义错误
GO程序中也支持自定义错误,使用errors.New和panic内置函数。

  1. errors.New("错误原因"),会返回一个error类型的值,表示一个错误。
  2. panic内置函数,接收一个interface{}类型的值(任何类型)作为参数。可以接收error类型的变量,输出错误信息,并退出程序。
func readFile(name string) (err error) {
	if name == "app.conf" {
		//文件名传入正确
		return nil
	} else {
		//文件名传入不正确 自定义错误信息
		return errors.New("文件名错误")
	}
}

func test2() {
	err := readFile("sa.config")
	if err != nil {
		//如果readFile方法发生异常,就输出错误,并且终止程序。
		panic(err)
	}
	fmt.Println("test2继续执行?") //这句代码如果发生异常就不会执行
}

标签:defer,err,处理,panic,func,Go,recover,异常
From: https://www.cnblogs.com/mafu-blogs/p/17979362

相关文章

  • go-net-http 4
    不要通过共享内存来通信,而应该通过通信来共享内存这个是golang社区的经典语说的是什么意思呢?之前使用C代码进行性能优化的时候,遇到了很多高性能的架构,但是其只依赖于高性能的MPSC队列(queue普遍使用的原子锁,offset,count都使用CAS操作),而从来不在事务逻辑里用锁那应该怎样理解?答......
  • Java开发者的Golang进修指南:从0->1带你实现协程池
    在Java编程中,为了降低开销和优化程序的效率,我们常常使用线程池来管理线程的创建和销毁,并尽量复用已创建的对象。这样做不仅可以提高程序的运行效率,还能减少垃圾回收器对对象的回收次数。在Golang中,我们知道协程(goroutine)由于其体积小且效率高,在高并发场景中扮演着重要的角色。然......
  • 使用Go发送HTTP POST请求
    在Go语言中,我们可以使用net/http包来发送HTTPPOST请求。以下是一个简单的示例,展示了如何使用Go发送HTTPPOST请求并获取响应。go复制代码package mainimport ("bytes" "fmt" "io/ioutil" "net/http" )func main() {//创建一个HTTP客户端client:=&http.Client{}//......
  • 在Go中处理HTTPS请求:一场加密的舞蹈
    嘿,Go语言的爱好者们,你们准备好跳一场加密的舞蹈了吗?今天,我们要一起探讨如何在Go中处理那些神秘的HTTPS请求。首先,我们要明白HTTPS是什么。简单来说,HTTPS就是给HTTP穿上了一层"加密的外套",让数据在传输过程中变得难以被窥视。这就像是在网络世界里,我们给自己的信息加了一把锁,只有拥......
  • go tool trace 跟踪执行过程,程序优化过程
    Go并发优化的9大技巧,效果立竿见影原创 Go先锋 Go先锋 2023-11-1008:02 发表于广东 听全文Go先锋读完需要8分钟速读仅需3分钟  概述Go语言以其在并发编程方面的优势而闻名,但合理利用各种优化技巧可以进一步提升Go程序的并发性能。本文将介绍在CP......
  • k8s_client-go 构建客户端的几种方式
    kubernetesclient-go构建客户端的几种方式packagecallk8simport( "context" "log" metav1"k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/client-go/t......
  • NetCore 统一格式(错误异常)
    使用方式:thrownewResponseException("未授权,操作失败"); 异常输出:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceMicro.Core.Utility{[Serializable]publicclassRe......
  • Python requests连接池超出错误urllib3.connectionpool:Connection pool is full disc
    今天在进行多线程请求的时候出现问题,但是是警告,不过会导致把其他请求给关闭掉,严重影响效率,在网上搜了一大堆都是说urllib3的,没有说requests的。WARNING:urllib3.connectionpool:Connectionpoolisfull,discardingconnection:450632824.shop.n.weimob.com.Connectionpools......
  • 新品来袭,全国产ARM+FPGA--"RK3568J+Logos-2"工业核心板,让您的硬件设计“更简单”!
    如需选购,请登录创龙科技天猫旗舰店:tronlong.tmall.com!欢迎加入RK3568J技术交流群:567208221欢迎加入Logos-2技术交流群:311416997更多产品详情以及购买咨询可添加如下客服人员微信(即刻添加,马上咨询) 更多RK3568J+Logos-2产品资料可长按二维码识别下载  ......
  • 界面控件DevExpress ASP.NET Data Grid组件 - 可快速处理各类型数据!(一)
    由DevExpress开发的快速且功能完整的ASP.NETWebForms的DataGrid组件,从全面的数据塑造和数据过滤选项到十多个集成数据编辑器,该套件提供了帮助用户构建极佳数据所需的一些,没有限制!P.S:DevExpressASP.NETWebForms Controls拥有针对Web表单(包括报表)的110+种UI控件,可利用轻量级......