cgo是否支持回调

wenjin_gu · · 4160 次点击
polaris
社区,需要你我一同完善!
说的是这样吗? package main // typedef int (*intFunc) (); // // int // bridge_int_func(intFunc f) // { // return f(); // } // // int fortytwo() // { // return 42; // } import "C" import "fmt" func main() { f := C.intFunc(C.fortytwo) fmt.Println(int(C.bridge_int_func(f))) // Output: 42 }
#1
更多评论
首先谢谢您的回答。我主要是想用Go语言来实现回调函数,对应到您的代码就是将fortytwo函数用Go语言来实现。由于cgo是不支持在C代码中调用Go代码的,所以这种方式恐怕不行。
#2
polaris
社区,需要你我一同完善!
Cgo 没有不允许在C代码中调用Go代码。 下面的代码不知道能满足你的需求不? ```golang // bar1.go package main import "C" //export Fortytwo func Fortytwo() int { return 42 } ``` ```golang // bar2.go package main /* extern int Fortytwo(); typedef int (*intFunc) (); int bridge_int_func(intFunc f) { return f(); } int callback() { return bridge_int_func(Fortytwo); } */ import "C" import "fmt" func main() { fmt.Println(int(C.callback())) // Output: 42 } ``` 编译:go build -o bar bar1.go bar2.go
#3