对“1.12 流程控制:defer 延迟语句”这一章节中对“defer 后面跟的是匿名函数特殊场景进行解答”。
sankforever opened this issue · comments
因为在defer函数定义时,对外部变量的引用是有两种方式的,分别是作为函数参数和作为闭包引用。
使用匿名函数的话是没有将参数传递过去的,在最后调用是才去拿值。
import "fmt"
func main() {
name := "go"
defer func(name string) {
fmt.Println(name) // 输出: go
}(name)
name = "python"
fmt.Println(name) // 输出: python
} // 这样输出就是python go
关于这个问题,我加了两篇 defer 的文章,你可以看一下