Go 面试题1

Posted by     "" on Wednesday, December 11, 2019

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

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

使用微信扫描二维码完成支付