Go 面试题1
1: 下面这段代码输出内容:
package main
import (
"fmt"
)
func main() {
deferCall()
}
func deferCall() {
defer func() {fmt.Println("打印前")}()
defer func() {fmt.Println("打印中")}()
defer func() {fmt.Println("打印后")}()
panic("触发异常")
}
先说结果:
$ go run demo1.go
打印后
打印中
打印前
panic: 触发异常
goroutine 1 [running]:
main.deferCall()
/Users/finup/finupdata/go-projects/go-interview/chapter01/demo1.go:16 +0xca
main.main()
/Users/finup/finupdata/go-projects/go-interview/chapter01/demo1.go:8 +0x20
exit status 2
剖析: defer
特性先进后出,所以会出现后面的先执行.大家对这个特性应该是都有了解.
但是如果结合panic
语句有些人就可能会搞不清楚到底是defer
先执行还是panic
先执行.
结论: 当panic
出现的时候, 会先按照defer
的后进先出的顺序执行, 最后才会执行panic
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付