deferingo安排在函数完成后运行的函数调用。所以1st打印功能fmt.Println("a ", Even())被推迟。但是当调用 defer 时执行参数,Even()立即调用函数。package mainimport "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 2c 4d 6a 0这是延迟发生的。我只想知道有什么方法可以停止在 defer 函数中执行参数?在这种情况下,输出将是:b 0c 2d 4a 6defer fmt.Println("a ", **Even()**)此Even()函数将与 一起执行Println。有没有办法做到这一点?
1 回答
精慕HU
TA贡献1845条经验 获得超8个赞
如果您将fmt.Println调用包装在另一个函数(在本例中为匿名函数)中,Even()则将在其他调用Even完成后进行评估:
func main() {
Even := MakeEvenNumber()
defer func() {
fmt.Println("a ", Even())
}()
fmt.Println("b ", Even())
fmt.Println("c ", Even())
fmt.Println("d ", Even())
}
- 1 回答
- 0 关注
- 131 浏览
添加回答
举报
0/150
提交
取消