gpt4 book ai didi

function - 一个函数是如何工作的

转载 作者:数据小太阳 更新时间:2023-10-29 03:22:09 25 4
gpt4 key购买 nike

本人初学围棋,有以下两个问题很困惑:

第一:

type S struct{
a func()
b func(i int, j float32, k string)
c *func()
}

func main(){
s := S{c: &func(){}} // Error: Cannot take the address of `func(){}`
}

在这个结构中,c *func() 是有效的,但是我如何分配给它

第二:
据我所知,函数是一等公民,所以我可以将函数作为参数传递给另一个函数/方法,我也可以声明一个函数变量,所以,函数值是如何工作的,它是实际上是一个函数指针?

我看了一些关于对齐和填充的文章,我知道一个接口(interface)值占用 16 个字节(64 位系统),因为接口(interface)值由数据指针和类型指针组成,函数值呢?我使用 unsafe.Sizeof(funcValue) 并返回 8,所以我猜它实际上是一个函数指针。有没有办法证明它(对或错)?

最佳答案

如果您希望能够使用指向此函数的变量地址,您需要先将其分配给一个变量。

package main

type S struct {
a func()
b func(i int, j float32, k string)
c *func()
}

func main() {
c := func() {}
s := S{c: &c} // No error
}

有关函数内部工作的更多信息,请参阅 language spec .

关于function - 一个函数是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51998664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com