假设我在golang中声明了一个func:
func myFunc() { }
声明采用函数地址的函数指针是错误的
fp := &myFunc
“无效操作:无法获取myFunc的地址(func()类型的值)”但是,我可以将其赋给函数值并获取地址
functionValue := myFunc fp := &function
“functionValue”和使用函数名“myFunc”有什么不同吗?它们不是同一类型吗?(func())
xqkwcwgp1#
myFunc是一个函数,functionValue是一个函数变量,是一个指向函数的变量,是一个闭包,例如:
myFunc
functionValue
var x int functionValue:=func() int {return x}
在上面,functionValue是一个函数变量,其闭包包含对x的引用。像myFunc这样的命名函数没有关联的闭包。像functionValue这样的函数变量有闭包。当你把它赋给myFunc时,闭包是空的。当你像上面那样赋给它时,闭包是非空的。正因为如此,调用函数的机制不同于调用函数变量。函数变量的地址就是那个变量的地址。
x
1条答案
按热度按时间xqkwcwgp1#
myFunc
是一个函数,functionValue
是一个函数变量,是一个指向函数的变量,是一个闭包,例如:在上面,
functionValue
是一个函数变量,其闭包包含对x
的引用。像
myFunc
这样的命名函数没有关联的闭包。像functionValue
这样的函数变量有闭包。当你把它赋给myFunc
时,闭包是空的。当你像上面那样赋给它时,闭包是非空的。正因为如此,调用函数的机制不同于调用函数变量。函数变量的地址就是那个变量的地址。