在Go中,可以通过使用cgo
工具来将函数指针传递给C代码。
以下是实现该功能的步骤:
.go
文件,命名为example.go
,其中包含你的Go代码。package main
// #include <stdio.h>
// extern void callCFunc(void (*func)());
import "C"
import "fmt"
// 导出的C函数,用于调用Go中的函数指针
//export callGoFunc
func callGoFunc() {
fmt.Println("Go function called from C")
}
func main() {
// 将Go函数指针传递给C代码
C.callCFunc((*[0]byte)(C.callGoFunc))
}
go build
命令编译生成可执行文件。go build -o example example.go
example.c
文件,用于实现C代码。#include <stdio.h>
// 声明C函数,用于接收Go函数指针
extern void callGoFunc();
int main() {
printf("C function called\n");
// 调用Go函数指针
callGoFunc();
return 0;
}
gcc -o example example.c example
./example
运行结果将会是:
C function called
Go function called from C
这样,你就成功地将函数指针从Go代码传递给了C代码。在这个例子中,Go代码中的callGoFunc
函数被导出为C函数,然后在C代码中被调用。你可以根据自己的需要修改和扩展这个示例。
领取专属 10元无门槛券
手把手带您无忧上云