GolangCodingTime icon indicating copy to clipboard operation
GolangCodingTime copied to clipboard

对“1.12 流程控制:defer 延迟语句”这一章节中对“defer 后面跟的是匿名函数特殊场景进行解答”。

Open sankforever opened this issue 4 years ago • 1 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

sankforever avatar Jun 24 '21 10:06 sankforever

关于这个问题,我加了两篇 defer 的文章,你可以看一下

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

iswbm avatar Jan 21 '22 01:01 iswbm