小学生也能看懂的Golang异常处理recover panic

 更新时间:2021年09月27日 15:32:29   作者:毛毛是一只狗  
在其他语言里,宕机往往以异常的形式存在,底层抛出异常,上层逻辑通过 try/catch 机制捕获异常,没有被捕获的严重异常会导致宕机,go语言追求简洁,优雅,Go语言不支持传统的 try…catch…finally 这种异常

🌌 专注Golang,Python语言,云原生,人工智能领域得博主
💜 过去经历的意义在于引导你,而非定义你,
💜 只要我们足够努力,任何人都有无限潜力

在这里插入图片描述

  • 🚀panic 抛出异常函数
  • 🚀recover 捕获异常函数

📣1:在一个主协成内捕获异常

package main

import (
	"fmt"
)

func main(){

	defer func(){
		err := recover()
		if err != nil{
			fmt.Println("捕获到异常")
		}
	}()

	panic("异常出现") //抛出异常,代表错误代码

}

🚀运行结果

在这里插入图片描述

📣2:假设子协成内部错误,看看主协成能不能捕获到

package main

import (
	"fmt"
)

func Calculate(){
    
	panic("异常出现")  // 同样代表错误代码
}



func main(){

	defer func(){
		err := recover()
		if err != nil{
			fmt.Println("捕获到异常")
		}
	}()

	go Calculate()
	
	time.Sleep(time.Second*3)  //防止主协成过早退出,导致子协成没执行

}

🚀执行结果,主协成不能捕获到子协成的错误

在这里插入图片描述

📣3:假设子协成错误需要自己捕获

package main

import (
	"fmt"
	"time"
)

func Calculate(){

	defer func(){
		err := recover()
		if err != nil{
			fmt.Println("协成内部捕获异常")
		}
	}()

	panic("异常出现")
}



func main(){

	go Calculate()

	time.Sleep(time.Second*3)

}

执行结果,成功捕获异常

在这里插入图片描述

到此这篇关于小学生也能看懂的Golang异常处理recover panic的文章就介绍到这了,更多相关Golang 异常处理 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • go tool pprof 参数 '-base' 和 '-diff_base'之间的区别解析

    go tool pprof 参数 '-base' 和 '-diff_base&

    这篇文章主要介绍了go tool pprof 参数 '-base' 和 '-diff_base'之间的区别,两个参数都是用于计算当前 profile文件减去基准profile文件所获得的差值,用这个差值生成一个新的profile文件,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 详解如何使用go-acme/lego实现自动签发证书

    详解如何使用go-acme/lego实现自动签发证书

    这篇文章主要为大家详细介绍了如何使用 go-acme/lego 的客户端或库完成证书的自动签发,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • Go语言执行系统命令行命令的方法

    Go语言执行系统命令行命令的方法

    这篇文章主要介绍了Go语言执行系统命令行命令的方法,实例分析了Go语言操作系统命令行的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • GO语言实现日志切割的示例详解

    GO语言实现日志切割的示例详解

    日志记录对程序排查问题比较关键,所以本文将选择Logrus和lumberjack两个库进行日志切割以及记录调用源,感兴趣的小伙伴可以了解一下
    2023-07-07
  • Go语言用map实现堆栈功能的方法

    Go语言用map实现堆栈功能的方法

    这篇文章主要介绍了Go语言用map实现堆栈功能的方法,实例分析了Go语言使用map操作堆栈的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 一文带你搞懂Golang如何正确退出Goroutine

    一文带你搞懂Golang如何正确退出Goroutine

    在Go语言中,Goroutine是一种轻量级线程,它的退出机制对于并发编程至关重要,下午就来介绍几种Goroutine的退出机制,希望对大家有所帮助
    2023-06-06
  • Golang内存泄漏场景以及解决方案详析

    Golang内存泄漏场景以及解决方案详析

    golang中内存泄露的发现与排查一直是来是go开发者头疼的一件事,下面这篇文章主要给大家介绍了关于Golang内存泄漏场景以及解决的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • go中控制goroutine数量的方法

    go中控制goroutine数量的方法

    这篇文章主要介绍了go中控制goroutine数量的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Golang flag包的具体使用

    Golang flag包的具体使用

    本文主要介绍了Golang flag包的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 详解Golang Map中的key为什么是无序的

    详解Golang Map中的key为什么是无序的

    本文主要介绍了Golang Map中的key为什么是无序的,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论