defer
中的 go
计划在函数完成后运行函数调用。
因此1st
打印函数fmt.Println("a ", Even())
被推迟。但是当调用defer时执行参数时,会立即调用Even()
函数。
package main
import "fmt"
func MakeEvenNumber() func() int {
num :=0
return func() (ret int) {
ret = num
num = num + 2
return ret
}
}
func main() {
Even := MakeEvenNumber()
defer fmt.Println("a ", Even())
fmt.Println("b ", Even())
fmt.Println("c ", Even())
fmt.Println("d ", Even())
}
输出:
b 2
c 4
d 6
a 0
这是推迟发生的。我只是想知道在延迟函数中停止执行参数的任何方法吗?
就像在这种情况下,输出将是:
b 0
c 2
d 4
a 6
defer fmt.Println("a ", **Even()**)
此Even()
函数将与Println
一起执行。
有什么办法吗?
答案 0 :(得分:3)
如果将fmt.Println
调用包装在另一个函数(在这种情况下为匿名函数)中,Even()
的评估将在其他Even
调用完成后发生:< / p>
func main() {
Even := MakeEvenNumber()
defer func() {
fmt.Println("a ", Even())
}()
fmt.Println("b ", Even())
fmt.Println("c ", Even())
fmt.Println("d ", Even())
}