我已经看到了很多不同的方法可以做到,在必须使用大量的包装和回调方面,它们似乎都不是理想的。有一种简单的方法吗?
例如,我们有:
//foo.go
package foo
import "C"
//export SayFive
func SayFive() int {
return 5
}
现在已经将其删除到最低限度,此时我想要做的就是在C中调用SayFive
函数。
但是,不在此文件的顶部。能够做到这一点非常简单和有用,但我正在寻找这样的方式:
//foo.c
#include <stdio.h>
int main() {
int a = SayFive();
}
我在上面的示例中看到过,#include "_cgo_export.h"
完全有道理,但当我完成并试图编译它时,它就会失败。
有人可以解释所涉及的整个过程,这样我们可以这样做吗?
答案 0 :(得分:4)
你可以从C中的Go和Go中调用C,但在Go程序的框架内只能 。
因此,使用main()
的C程序示例将无效,因为这将在C程序的框架内调用Go。
换句话说,Go无法创建可以与C程序静态或动态链接的对象。
因此,你必须将你想要做的事情转变为头,并将Go程序作为主程序,并从中调用C程序部分。这意味着具有main()
功能的程序必须是Go程序。
希望有意义!