首页 > 其他分享 >go的defer里面recover和panic

go的defer里面recover和panic

时间:2023-03-04 12:15:39浏览次数:30  
标签:defer main fmt ..... funB go recover

package main

import "fmt"

func main() {
	/*
		panic:词义"恐慌",
		recover:"恢复"
		go语言利用panic(),recover(),实现程序中的极特殊的异常的处理
			panic(),让当前的程序进入恐慌,中断程序的执行
			recover(),让程序恢复,必须在defer函数中执行
	*/
	defer func(){
		if msg := recover(); msg != nil{
			fmt.Println(msg,"程序回复啦。。。")
		}
	}()
	funA()
	defer myprint("defer main:3.....")
	funB()
	defer myprint("defer main:4.....")

	fmt.Println("main..over。。。。")
}

func myprint(s string){
	fmt.Println(s)
}

func funA(){
	fmt.Println("我是一个函数funA()....")
}

func funB(){//外围函数
	fmt.Println("我是函数funB()...")
	defer myprint("defer funB():1.....")

	for i := 1; i <= 10; i++ {
		fmt.Println("i:",i)
		if i == 5 {
			//让程序中断
			panic("funB函数,恐慌了")
		}
	}//当外围函数的代码中发生了运行恐慌,只有其中所有的已经defer的函数全部都执行完毕后,该运行恐慌才会真正被扩展至调用处。
	defer myprint("defer funB():2.....")
}

输出:

我是一个函数funA()....
我是函数funB()...
i: 1
i: 2
i: 3
i: 4
i: 5
defer funB():1.....
defer main:3.....
funB函数,恐慌了 程序回复啦。。。

标签:defer,main,fmt,.....,funB,go,recover
From: https://www.cnblogs.com/heris/p/17178018.html

相关文章

  • go的闭包捕获变量
    packagemainimport( "fmt")funcA()int{ variint deferfunc(){ i++ fmt.Println("deferfuncA",i) }() fmt.Println("funcA",i) returni}func......
  • Study for Go ! Chapter two - Expression
    StudyforGo!Chaptertwo-Expression1.Keyword   Golang仅有25个保留关键字,体现了golang语法规则的简洁性保留关键字不能用作常量、变量、函数名......
  • go day200
    结构体变量的赋值点击查看代码packagemainimport"fmt"typeStustruct{ Namestring Ageint}funcmain(){ //方式一:在创建结构体变量时,直接指定字段......
  • MongoDB写入数据策略
    上篇文章介绍了Mongo读取数据的策略(MongoDB读数据策略),主要是readconcern、readpreference两参数,其中readconcern作用于服务端,决定了什么时候能读取到数据;readpreference在客......
  • Wire:Go最优雅的依赖注入工具
    阅读用时:4分钟导语“成熟的工具,要学会自己写代码”。本文介绍了Go依赖注入工具[[Wire]]及其使用方法,以及在实践中积累的各种运用技巧。当代码达到一定规模后,[[Wire]......
  • 敏捷工具leangoo领歌时间线视图上线啦
    https://www.leangoo.com/17735.htmlLeangoo企业版新增「时间线视图」,通过「时间线视图」你可以在项目管理中非常直观的了解每个人的工作分配及各个任务的排期,方便及时......
  • [Go语言tips04]二维数组与二维切片
    0.引言既然在Go语言中数组和切片同时存在并且是两个不同的类型,那当他们是二维时又会产生什么样的问题?因为数组和切片同时存在,在Go语言中二维的使用就会显得和别的语言很......
  • Go组件库总结之协程睡眠唤醒
    本篇文章我们用Go封装一个利用gopark和goready实现协程睡眠唤醒的库。文章参考自:https://github.com/brewlin/net-protocol1.gopark和goready的声明//go:linknamegopark......
  • protobuf golang&&python序列化反序列化测试
    1.概要最近考虑采用protobuf来实现kafka消息传递,所以先测试一下golang和python之前序列化互通问题。由于go和python对于二进制的表示在ide层面是无法统一的,直接把python......
  • Django+vue 上传execl文件并解析
    Django+vue上传execl文件并解析VUE<template><el-buttontype="primary"class="but_list_but1"><inputtype="file"name="avatar"id="avatar"style="display......