问题内容
在 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)其它相关文章!