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

标签 function go syntax memory-alignment

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

第一:

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/

相关文章:

go - 使用原始套接字发送自定义以太网数据包

syntax - 为什么我的 RSS 提要重复某些条目?

mysql - 我在 R 中编写了一个查询(SQL)来从数据库中获取一些数据。我想传递由 R 中的子例程指定的日期,而不是对其进行硬编码

c - 将数组作为参数传递给 C 中的函数

php - 在Javascript函数下调用php页面

Go Error : panic: runtime error: invalid memory address or nil pointer dereference. Changing map inside a struct which is present in 另一个结构,

amazon-web-services - 当 key 包含阿拉伯字符时,AWS Golang SDK 无法复制对象

java - : "X.<String, String>method()" 中泛型语法的名称是什么

c - printf 输出错误

JavaScript 第二个函数参数神奇地获取了一个值