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

标签 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
    }
}

最佳答案

这只是意味着该函数正在返回一个不带参数并返回整数的函数。这就是

... func() int 

您签名的一部分是这样说的。

您收到的错误是因为您的 fmt.Println 无法打印函数。为了证明这一点,你可以看到如果你调用,你会得到同样的错误,

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

func foo() int {
  return 1
}

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

func main() {
    myIncrementer := incrementer()
    fmt.Println(myIncrementer()) // Prints 1
}

你在哪里创建增量器,它是一个函数,然后调用返回 1 的函数 function。

关于go - func 关键字后的两个函数名称 - 它是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53940351/

相关文章:

multithreading - 即使使用 GOMAXPROCS(4),GoLang 程序也在单线程上执行

sql - Go sql - 准备好的语句范围

go - 如何确定接口(interface) slice 中的值类型{}

docker - 从 Go api 连接到 Redshift 时出现 SSL 错误

go - 如何在 Golang 中查找来自控制台的标志数

google-app-engine - 超出软专用内存限制

json - Golang 编码/json 编码添加 null

mongodb - 在 GO 中将类型从结构表转换为 base.FixedDataGrid

xml - 如何将嵌套的 XML 元素解码为字符串数组?

go - 是否可以将 Go 代码作为脚本运行?