Go 的编译器如何处理嵌套函数?

2024年 2月 5日 35.8k 0

go 的编译器如何处理嵌套函数?

问题内容

在 go 中编写嵌套函数时,编译器如何处理它?它是变成另一个函数并放在代码之外,还是在调用父函数时重新创建它?

例如:

func funca() int {
a := 0
funcb := func(_a int) int {
return _a
}
return funcb(a)
}

登录后复制

这个函数是按如下方式编译的吗?

func FuncA() int {
a := 0
return _funcB(a)
}
func _funcB(_a int) int {
return _a
}

登录后复制

或者它是否完全按照编写的方式编译,这意味着每当调用 funca 时都会为 funcb 的定义分配新内存?

正确答案

嵌套函数编译一次。

由于 FuncB 不会关闭周围作用域中的变量,因此 FuncA 不会分配堆内存。

如果 FuncB 关闭周围范围内的任何变量,那么这些变量将在堆上分配。函数本身被编译一次。

以上就是Go 的编译器如何处理嵌套函数?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论