lambdas按预期工作:

func main() {
    inc := func(x int) int { return x+1; }
}

但是,不允许在声明中包含以下声明:

func main() {
    func inc(x int) int { return x+1; }
}

出于什么原因不允许嵌套函数?

推荐答案

我认为有3个原因不允许使用这个明显的功能

  1. 这会使编译器稍微复杂化.目前,编译器知道所有函数都在顶层.
  2. 这会造成一种新的程序员错误——你可能会重构一些东西,并意外地嵌套一些函数.
  3. 函数和闭包有不同的语法是一件好事.做一个闭包可能比做一个函数更昂贵,所以你应该知道你在做什么.

这些只是我的观点--我还没有看到语言设计者的官方声明.

Go相关问答推荐

你能帮我优化一个golang代码关于函数CrossPointTwoRect

Pulumi-S3-当策略依赖于访问点时,如何将AccesspintPolicy附加到访问点

如何在Golang中获取mp3文件的持续时间?

如何使用GO GIN从Auth0 JWT内标识检索权限

go中跨域自定义验证的问题

切片的下限和上限

htmx 表单 + gin 无法正确读取请求正文

按位移计算结果中的差异

如何在 Go msgraph-sdk-go 中转发消息并包括抄送和/或密送收件人?

如何使用 sync.WaitGroup 来执行所有的 goroutine?

GoLang:net.LookupHost 返回重复的 ips

GOLANG:为什么 SetDeadline/SetReadDeadline/SetWriteDeadline 在使用 os.File.Fd() 时对文件不起作用?

如何为导入的嵌入式 struct 文字提供值?

如何优雅地映射到 Go 中返回可变长度数组的方法?

在 Go 中将指针传递给函数的正确方法是什么,以便我可以读取和/或修改指针表示的值?

在 Golang 中获取谷歌云服务帐户的访问令牌?

实现接口的指针的泛型类型是什么?

防止在 Go 公用文件夹中列出目录

Go:如何通过 GIN-Router 从 AWS S3 将文件作为二进制流发送到浏览器?

Golang 泛型同时具有接口和实现