你真的了解 defer 吗
上一篇文章我们主要从使用的角度介绍了 defer 的基础知识,本文我们来分析一下 defer 的实现机制。
还是从一个例子程序开始。
package main import "fmt" func sum(a, b int) { c := a + b fmt.Println("sum:" , c) } func f(a, b int) { defer sum(a, b) fmt.Printf("a: %d, b: %d\n", a, b) } func main() { a, b := 1, 2 f(a, b) }
从前一篇文章我们得知,编译器会把 defer 语句翻译成对 deferproc 函数的调用,同时,编译器也会在使用了 defer 语句的 go 函数的末尾插入对 deferreturn 函数的调用,下面我们来看一下这两个函数的实现代码。
关注我