Go 我延迟一个函数返回函数,顺序是什么

Go 我延迟一个函数返回函数,顺序是什么,go,Go,我写下面的代码 package main import "fmt" func main() { defer func() func() { fmt.Println("start") return func() { fmt.Println("end") } }()() fmt.Println("aaaa") return } 而我除了输出是aaaa开始结束 但实际输出是从开始到结束 我

我写下面的代码

package main

import "fmt"

func main() {
    defer func() func() {
        fmt.Println("start")
        return func() {
            fmt.Println("end")
        }

    }()()
    fmt.Println("aaaa")
    return

}
而我除了输出是aaaa开始结束

但实际输出是从开始到结束

我不明白为什么在“aaaa”之前输出“start”:

每次执行“defer”语句时,调用的函数值和参数都会像往常一样求值并重新保存,但不会调用实际函数

延迟函数调用是延迟语句中的最后一个
()
。返回函数值的表达式在DEBER语句时进行求值。

每次执行“defer”语句时,调用的函数值和参数都会像往常一样求值并重新保存,但不会调用实际函数


延迟函数调用是延迟语句中的最后一个
()
。返回函数值的表达式在DEBER语句时求值。

由于DEBER语句需要求值语句,因此在代码中,func()(“DEBER”关键字后面的func()返回函数类型,DEBER语句需要实际执行func()以获取返回函数。所以你的代码先打印“开始”


如果函数未返回函数类型,则函数体将不会执行,直到封闭函数返回。

由于DEPER语句需要对语句求值,因此在代码中,func()(“DEPER”关键字后面的func()返回函数类型,DEPER语句需要实际执行func()获取返回函数。所以你的代码先打印“开始”


如果函数未返回函数类型,则函数体将不会执行,直到封闭函数返回。

您正在调用调用的
func()func()
,并返回调用的
func()
。请参见末尾的双参数
}()
。在调用第一个函数时,
defer
被告知调用从第一个函数返回的第二个函数。您正在调用被调用的
func()func()
,并返回正在调用的
func()
。请参见末尾的双参数
}()
。您正在调用第一个,
defer
被告知调用第一个返回的第二个。