将c-shared库回调转换为其他语言

jim*_*jim 7 python java callback go

我在开发将被写入围棋并编译成一个库的过程中C shared library通过语言,如因此它可以被称为Python,Node.JS,JavaRuby

我刚刚意识到回调时会出现问题.如何回调至少是上述语言之一的调用代码?有没有一种方法可以做到这一点,还是我需要在Go方面为每种语言实现特定的东西?

更新清晰度:

我已经能够将Go构建为库并执行其他语言(如Java和Python)的代码.

我的问题特别涉及go以异步方式运行并需要回调调用者(即Java,Python)的情况.

小智 4

不同编程语言之间接口的通用语言是通过 C。您可以使用cgo之类的东西使您的 Go 代码可以通过 C 访问,然后使用 C 或 Python、Java 等中的“本机”绑定来调用它。

通常,开发人员只会在大型且维护良好的项目中经历这么多麻烦。如果您有一个个人项目并且性能不太重要,我建议通过 json (对于网络语言)或 stdout/stderr 管道(可能更多您想要的)进行通信。您可以从 Ruby 将命令打印到 stdout,并让 Go 代码处理请求并报告其 stdout。将输入和输出通过管道传输到另一个程序通常是可能的,尽管有时很棘手。CGI 程序就是这样工作的,产生其他语言的解释器并将数据传输到该解释器。

更新:如果你想传递对象,从 Go 回调 Java/Python/任何语言运行时都是很困难的;我想这需要根据绑定 API(JavaPython)进行不同的设计。如果绑定到位,也许您已经解决了这个问题?如果您可以不向回调传递任何参数(即它基本上是一个计时器回调),那么可能会更容易。最小化需要在 Go 中生成并用其他语言读取的数据。