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

10-02 23:03