在新的Go语言中,我如何调用c++代码?换句话说,我如何包装我的c++类并在Go中使用它们?


当前回答

在使用gcc Go编译器gccgo时,我们讨论了C和Go之间的互操作性。然而,当使用gccgo时,Go的互操作性和实现的特性集都有限制(例如,有限的goroutines,没有垃圾收集)。

其他回答

您可能需要向Golang/CGo的LDFlags添加-lc++来识别对标准库的需求。

从go1.2+开始,cgo自动合并和编译c++代码:

http://golang.org/doc/go1.2#cgo_and_cpp

在使用gcc Go编译器gccgo时,我们讨论了C和Go之间的互操作性。然而,当使用gccgo时,Go的互操作性和实现的特性集都有限制(例如,有限的goroutines,没有垃圾收集)。

你正走在一个未知的领域。这里是调用C代码的Go示例,也许在阅读了c++命名混乱和调用约定以及大量的试验和错误之后,您可以做一些类似的事情。

如果你还想尝试,祝你好运。

目前看来,SWIG是最好的解决方案:

https://www.swig.org/Doc4.0/Go.html

它支持继承,甚至允许用Go结构子类化c++类,因此当c++代码中调用重写的方法时,Go代码将被触发。

Go常见问题解答中关于c++的部分更新了,现在提到了SWIG,不再说“因为Go是垃圾收集的,这样做是不明智的,至少是天真的”。