为了账号安全,请及时绑定邮箱和手机立即绑定

如何在延迟函数中延迟执行参数

如何在延迟函数中延迟执行参数

Go
qq_花开花谢_0 2021-11-01 16:30:23
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())

}


查看完整回答
反对 回复 2021-11-01
  • 1 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信