Golang返回功能

kun*_*zor 8 go nested-function

任何人都可以解释为什么0和1打印而不是其他什么?谢谢!

func makeFunction(name string) func() {
    fmt.Println("00000")
    return func() {
        makeFunction2("abcef")
    }
}

func makeFunction2(name string) func() {
    fmt.Println("11111")
    return func() {
        makeFunction3("safsf")
    }
}

func makeFunction3(name string) func() {
    fmt.Println("33333")
    return func() {
        fmt.Printf("444444")
    }
}

func main() {
    f := makeFunction("hellooo")
    f()
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么0和1打印而不是其他什么?谢谢!

Adr*_*ian 9

让我们按照程序流程:

  1. main 开始.
  2. main电话makeFunction.
  3. makeFunction打印00000,并返回匿名函数.
  4. 回来main,我们调用前一次调用返回的匿名函数.
  5. 匿名函数调用makeFunction2.
  6. makeFunction2打印11111,并返回匿名函数.
  7. main 回报.

因为在上面的步骤6之后丢弃了返回值,所以不打印任何其他内容.


Pie*_*tti 5

让我们看看您的main

1号线

f := makeFunction("hellooo")
Run Code Online (Sandbox Code Playgroud)
  • 副作用:打印“ 00000”
  • 返回值:执行的匿名函数makeFunction2("abcef"),分配给标识符f

2号线

f()
Run Code Online (Sandbox Code Playgroud)

等效于:

_ = f()
Run Code Online (Sandbox Code Playgroud)
  • 副作用:打印“ 11111”
  • 返回值:一个匿名函数,执行该函数,makeFunction3("safsf")将其丢弃(您未分配的返回值f())。

makeFunction3 永远不会分配给任何标识符,也永远不会调用。