内容简介:Form 面向奶酪的简明笔记defer语句用来调用一个函数调用(被延期的函数),在执行defer的函数返回之前才会被执行。常用来释放资源,会在函数返回之前进行调用。
Go 简明笔记:defer 、恐慌panic、恢复recover 。
Form 面向奶酪的简明笔记
defer
defer语句用来调用一个函数调用(被延期的函数),在执行defer的函数返回之前才会被执行。
常用来释放资源,会在函数返回之前进行调用。
举个栗子:
func main() {
fmt.Println("1 Iron Man")
fmt.Println("2 Iron Man")
defer fmt.Println("main defer")
foo1()
}
func foo1(){
defer fmt.Println("foo1 defer")
fmt.Println("1 Spider Man")
fmt.Println("2 Spider Man")
}
输出结果:
1 Iron Man
2 Iron Man
1 Spider Man
2 Spider Man
foo1 defer
main defer
defer会在函数返回之前执行。
panic & recover ,恐慌与恢复。
panic():是一个内建函数,可以中断原有的控制流程,进入一个令人恐慌的流程中。
当在一个函数执行过程中调用 panic() 函数时,正常的函数执行流程将立即终止,但函数中 之前使用 defer 关键字延迟执行的语句将正常展开执行,之后该函数将返回到调用函数,并导致 逐层向上执行 panic 流程,直至所属的goroutine中所有正在执行的函数被终止。这一过程继续向上,直到程 序崩溃时的所有 goroutine 返回。 恐慌可以直接调用 panic 产生。也可以由运行时错误产生,例如访问越界的数组。
recover():是一个内建的函数,可以让进入令人恐慌的流程中的 goroutine 恢复过来。 Recover 仅在延迟函数中有效。 在正常的执行过程中,调用 recover 会返回 nil 并且没有其他任何效果。如果当前 的 goroutine 陷入恐慌,调用 recover 可以捕获到 panic 的输入值,并且恢复正常的执 行。
recover 务必配合defer函数一起使用。
package main
import "fmt"
func main() {
fmt.Println("程序开始执行")
defer func() {
if msg:=recover();msg!=nil {
fmt.Println("打印异常--->",msg)
}
}()
pic()
}
func pic(){
fmt.Println("1")
panic("panic...")
fmt.Println("2")
}
输出结果:
程序开始执行
1
打印异常---> panic...
以上所述就是小编给大家介绍的《简明笔记:defer、panic、recover 详解。》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Structures and Algorithms
Alfred V. Aho、Jeffrey D. Ullman、John E. Hopcroft / Addison Wesley / 1983-1-11 / USD 74.20
The authors' treatment of data structures in Data Structures and Algorithms is unified by an informal notion of "abstract data types," allowing readers to compare different implementations of the same......一起来看看 《Data Structures and Algorithms》 这本书的介绍吧!