代码1
https://play.golang.org/p/a0I6kiIYz6i
package main
import "fmt"
var m = 0
func main() {
//defer 方法中的参数方法会被执行时候县渲染。 这个时候返回的是0 而不是1
defer doSome(getValue())
m = 1
fmt.Println("end")
}
func doSome(value int) {
fmt.Println(value) // 0
}
func getValue() int {
return m
}
代码2
https://play.golang.org/p/HetlvwuVrT5
package main
import "fmt"
var m = 0
func main() {
defer doSome()
m = 1
fmt.Println("end")
}
func doSome() {
fmt.Println(m) // 1
}
本文通过两个示例代码深入探讨了Go语言中defer语句的工作原理。解释了在函数结束时,defer调用如何按先进后出的顺序执行,以及在defer调用中捕获变量值的时间点。这对于理解Go并发模型和编写更高效的代码至关重要。
485

被折叠的 条评论
为什么被折叠?



