github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/20_trap/day01/main.go (about)

     1  package main
     2  
     3  // 下面这段代码输出的内容
     4  
     5  import (
     6  	"fmt"
     7  )
     8  
     9  func main() {
    10  	deferCall()
    11  }
    12  
    13  func deferCall() {
    14  	defer func() { fmt.Println("打印前") }()
    15  	defer func() { fmt.Println("打印中") }()
    16  	defer func() { fmt.Println("打印后") }()
    17  	panic("触发异常")
    18  }
    19  
    20  // 参考解析:defer 的执行顺序是后进先出。当出现 panic 语句的时候,会先按照 defer 的后进先出的顺序执行,最后才会执行panic