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

deferingo安排在函数完成后运行的函数调用。所以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

这是延迟发生的。我只想知道有什么方法可以停止在 defer 函数中执行参数?


在这种情况下,输出将是:


b 0

c 2

d 4

a 6

defer fmt.Println("a ", **Even()**)此Even()函数将与 一起执行Println。


有没有办法做到这一点?


qq_花开花谢_0
浏览 134回答 1
1回答

精慕HU

如果您将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())}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go