在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)并直接调用它。