登录
首页 >  Golang >  Go问答

为什么我不能获取 golang 中函数的地址,但可以获取函数值

来源:stackoverflow

时间:2024-03-17 18:18:28 272浏览 收藏

在 Go 语言中,函数本身不可寻址,但可以获取函数值的地址。这是因为函数值是一个指向函数的变量,而函数本身是一个闭包。闭包包含对变量的引用,而命名函数没有与之关联的闭包。因此,调用函数的机制与调用函数变量不同,导致函数变量的地址就是该变量的地址,而函数本身不可寻址。

问题内容

假设我在 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 时,该闭包为空。当您像上面那样分配它时,它是非空的。因此,调用函数的机制与调用函数变量不同。

函数变量的地址就是该变量的地址。

到这里,我们也就讲完了《为什么我不能获取 golang 中函数的地址,但可以获取函数值》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>