func关键字后面的两个函数名称 - 它是什么?

roz*_*rro 0 go

如何理解最后的功能?为什么我们在func声明后使用不同的函数名?如何使用这些功能?像main功能中所示使用它是错误的.

package main

import (
    "fmt"
)

func main() {
    fmt.Println(incrementer()) //error
}

func incrementer() func() int { //what is it?!
    i := 0
    return func() int {
        i++
        return i
    }
}
Run Code Online (Sandbox Code Playgroud)

tmc*_*col 6

它只是意味着函数返回一个不带参数的函数并返回一个整数.那是什么的

... func() int 
Run Code Online (Sandbox Code Playgroud)

你签名的一部分是说.

您得到的错误是因为您fmt.Println无法打印功能.为了显示这一点,你可以看到,如果你打电话,你会得到同样的错误,

func main() {
    fmt.Println(foo)
}

func foo() int {
  return 1
}
Run Code Online (Sandbox Code Playgroud)

如果你像这样调用你的函数,可能会更清楚地看到发生了什么.

func main() {
    myIncrementer := incrementer()
    fmt.Println(myIncrementer()) // Prints 1
}
Run Code Online (Sandbox Code Playgroud)

在创建增量器的地方,这是一个函数,然后调用返回1的函数函数.