go - 为什么CGO无法在C中直接调用函数指针?

标签 go cgo

在C中定义

typedef err_t(* netif_input_fn) (struct pbuf *p, struct netif *inp);

在GO中运行

// netif.input is function pointer defined in C
netif.input(buf, netif)
// got error: cannot call non-function netif.input (type _Ctype_netif_input_fn)

最佳答案

Go中的CGO函数是C函数,需要对其进行特殊处理以注意其堆栈。

Go中的功能(又称goroutine)以较小的堆栈大小(2 kB)开始,并且该堆栈将自动扩展或缩小。虽然CGO功能无法从此功能中受益,但在大多数操作系统上,其初始堆栈大小为2MB,并将在其他堆栈(g0堆栈)上执行。因此,Go运行时无法将CGO函数视为普通的Go函数(goroutine)并直接调用它。

关于go - 为什么CGO无法在C中直接调用函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61995193/

相关文章:

go - 在 go 中,这一行是否创建了一个新的空映射,其中字符串作为键和值?

go - 如何在golang中将 slice 附加到字节数组

docker - 我应该安装什么包而不是 libpcre++-dev 在 Alpine Golang 中使用 C 代码?

go - 我可以更改 cgo 使用的默认编译器吗?

将 C 结构转换为 Go 结构的好方法或推荐方法

c - C 中的指针从内存中删除

json - 从 relfect.Value 编码 JSON

linux - 未设置 GOPATH 环境变量

golang crontab 每天午夜执行函数

Golang : multiple definition of CGO ported package