假设我在 golang 中声明了一个函数:
func myfunc() { }
声明使用函数地址的函数指针是错误的
fp := &myfunc
“无效操作:无法获取 myfunc 的地址(func() 类型的值)”
但是,我可以将它分配给一个函数值并获取地址
functionValue := myFunc fp := &function
“functionvalue”与使用函数名称“myfunc”有什么不同吗? 他们俩不是同一类型吗? (函数())
myfunc
是一个函数。 functionvalue
是一个函数变量,它是一个指向函数的变量,也是一个闭包。例如:
var x int functionValue:=func() int {return x}
上面,functionvalue
是一个函数变量,其闭包包含对 x
的引用。
像 myfunc
这样的命名函数没有与之关联的闭包。像 functionvalue
这样的函数变量有一个闭包。当您将其分配给 myfunc
时,该闭包为空。当您像上面那样分配它时,它是非空的。因此,调用函数的机制与调用函数变量不同。
函数变量的地址就是该变量的地址。