登录
首页 >  Golang >  Go问答

func 关键字后面的两个函数名称意味着什么?

来源:stackoverflow

时间:2024-03-19 15:54:28 217浏览 收藏

**文章首段摘要** 在 Go 语言中,`func` 关键字后的两个函数名称表示:第一个函数名是返回的函数的名称,第二个函数名是该返回函数的名称。这种设计模式称为“函数闭包”,它允许创建具有特定状态或行为的新函数。 通过返回的函数,可以访问和修改外部函数的局部变量,从而实现状态保持和行为定制。在使用闭包时,需要注意返回的函数不能直接在`func`声明中调用,而是需要在后续代码中显式调用。

问题内容

最后一个函数怎么理解? 为什么我们在 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
    }
}

解决方案


简单来说,由于 incrementer() 返回一个函数,因此也必须调用它返回的函数。您可以这样做:

functionfoo := incrementer()
fmt.println(functionfoo())

或者这种人力不足的方式:

fmt.println(incrementer()())

这实现了同样的效果,您只需立即执行 incrementer() 返回的函数即可。

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

... func() int

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

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

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

func foo() int {
  return 1
}

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

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

您正在创建增量器(它是一个函数),然后调用该函数并返回 1。

本篇关于《func 关键字后面的两个函数名称意味着什么?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>