【发布时间】:2018-08-24 06:26:44
【问题描述】:
我是一个学习围棋的初学者,对以下两个问题感到困惑:
第一:
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() 是有效的,但是how can I assigned to it?
第二:
据我所知,函数是一等公民,所以我可以将函数作为参数传递给另一个函数/方法,也可以声明一个函数变量,那么how does a function value works,它实际上是一个函数指针吗?
我看了一些关于对齐和填充的文章,我知道一个接口值占用16字节(64位系统),因为接口值由数据指针和类型指针组成,what about function value?我使用unsafe.Sizeof(funcValue),它返回8,所以我猜它实际上是一个函数指针。有什么方法可以证明(对还是错)?
【问题讨论】:
标签: function go syntax memory-alignment