Go语言中的panic recover defer

panic 抛出异常
recover 捕获异常 捕获后会返回外层函数继续执行
defer 函数退出之前执行

func panicOut() {

print(5)
 panic("error")
 print(6)

}
func recoverHere() {

print(3)
 defer func(){
       err := recover()
       print(err)
 }()
 panicOut()
 print(4)

}

func outFunc(){

print(1)
 recoverHere()
 print(2)

}

func main(){

outFunc()

}

输出:
1
3
5
error
2

时间: 2024-10-29 12:57:44

Go语言中的panic recover defer的相关文章

defer, panic, recover使用总结

1. defer : 延迟调用.多个defer,依次入栈,在函数即将退出时,依次出栈调用 1 package main 2 import "fmt" 3 func main() { 4 defer func() { 5 fmt.Println("defer one") 6 }() 7 defer func() { 8 fmt.Println("defer two") 9 }() 10 defer func() { 11 fmt.Println(&

C语言中的system函数参数详解

http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功   能: 发出一个DOS命令 用   法: int system(char *command); system函数已经被收录在标准c库中,可以直接调用 system()函数用于向操作系统传递控制台命令行,以WINDOWS系统为例,通过system()函数执行命令和在DOS窗口中执行命令的效果是一样的,所以只要在运行窗口中可以使用的命令都可以用SYSTEM()

C语言中的system函数參数具体解释

http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功   能: 发出一个DOS命令 用   法: int system(char *command); system函数已经被收录在标准c库中,能够直接调用 system()函数用于向操作系统传递控制台命令行,以WINDOWS系统为例,通过system()函数运行命令和在DOS窗体中运行命令的效果是一样的,所以仅仅要在运行窗体中能够使用的命令都能够用SYSTEM(

[转]理解Go语言中的nil

最近在油管上面看了一个视频:Understanding nil,挺有意思,这篇文章就对视频做一个归纳总结,代码示例都是来自于视频. nil是什么 相信写过Golang的程序员对下面一段代码是非常非常熟悉的了: if err != nil { // do something.... } 当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理,而如果等于nil说明运行正常.那什么是nil呢?查一下词典可以知道,nil的意思是无,或者是零值.零值,zero value,是不是有点

在Swift语言中,关于Any,AnyObject,AnyClass的区别与联系

在Swift语言中,协议定义类或结构体应该遵守的变量和方法集合,如下所示,这个一个标准的协议的声明: protocol NSObjectProtocol { func isEqual(object: AnyObject?) -> Bool var hash: Int { get } var superclass: AnyClass? { get } func `self`() -> Self! func isProxy() -> Bool func isKindOfClass(aClas

GO语言中import的规则和用法

GO语言中引入包使用import,我将在本文讲解下规则和用法. 一些规则: 1.包中不能有main方法. 2.同文件夹中可以直接用方法名调用. 3.main函数建议放在package main里4.main不能调用同个目录下的其它文件中的方法. 5.还可以把包放在上级的目录中,如: /src/myFolder/foo/bar1.go #package foo /src/myFolder/foo/bar2.go #package foo /src/myFolder/foo/bar3.go #pac

Java语言中String累的总结

String类 1.Java.lang包简介 java.lang包是java内置的一个基础包,其中包含了一系列程序中经常要用到的类: 在默认情况下,每个java程序都会自动导入该包,因此无需在程序中显式地声明. 2.String类 Java语言中,字符串是String类的对象: Java语言中,String是引用数据类型: 可以通过使用String类提供的方法来完成对字符串的操作: 创建一个字符串对象之后,将不能更改构成字符串的字符: 每当更改了字符串版本时,就创建了一个新的字符串对象,并在其内

C语言中,头文件和源文件的关系(转)

简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件)4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息.(生成.exe文件) 编译器在编译时是以C文件为单位进行的,也就是

C语言中,定义的含义?声明的含义?它们之间的区别是什么?

在C语言中,对于定义和声明,也许我们非常的熟悉,但不一定真正的了解! 定义的含义:所谓定义,就是创建(编译器)一个对象,为这个对象分配一块内存空间并取名,也就是我们平常所说的变量名或对象名,一旦这个名字和这块内存空间匹配,那么在定义的这个对象或变量的生命周期中,所创建的这个变量名将不能再被改变,并且内存空间的位置也不会改变.在一个区域内(函数内,全局),一个名字只能被定义一次,不能重复定义. 声明的含义:声明有两重含义 第一重含义:告诉编译器,这个名字已经匹配到了一块内存空间上,后面的代码所用到