我在使用关于返回值的“延迟”时遇到了一些问题。我尝试以不同的方式运行一个测试函数(只有 i 的定义不同),但结果不同。所以,我对不同的返回值感到困惑。这是问题所在:
功能一:
package main
import "fmt"
func main() {
fmt.Println("a return:", a()) // return value: 0
}
func a() int {
var i int
defer func() {
i++
fmt.Println("a defer1:", i) // print " a defer1: 1"
}()
return i
}
Run Code Online (Sandbox Code Playgroud)
返回值:
a defer1: 1
a return: 0
Run Code Online (Sandbox Code Playgroud)
功能二:
package main
import "fmt"
func main() {
fmt.Println("a return:", a()) // return value: 1
}
func a() (i int) {
defer func() {
i++
fmt.Println("a defer1:", i) // print …Run Code Online (Sandbox Code Playgroud) go ×1