iswbm / GolangCodingTime

Go编程时光,一个零基础入门 Golang 的教程

Home Page:http://golang.iswbm.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

对“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 的文章,你可以看一下

  1. 7.14 说说 Go 中闭包的底层原理?
  2. 7.15 defer 的变量快照什么情况会失效?