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

时间:2016-04-04 04:14:35

标签: java python go callback

我正在开发一个将在Go中编写并编译为<div ng-controller="controller2"> {{data}} <br> <button ng-click="buttonClick()">Clickme!</button> </div> 的库,因此可以通过C shared libraryPython,{等语言调用它{1}}和Node.JS

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

为清晰起见而更新:

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

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

2 个答案:

答案 0 :(得分:4)

不同编程语言之间接口的通用语言是通过C.您可以使用cgo之类的东西来通过C访问Go代码,然后使用C或&#34; native&#34; Python,Java等中的绑定来调用它。

通常开发人员只会为大型且维护良好的项目经历这么多麻烦。如果你有一个个人项目,如果性能不是一个问题,我建议通过json(用于web语言)或stdout / stderr管道(可能更多你想要的)进行通信。您可以从Ruby向stdout打印命令,让Go代码处理请求并在其stdout上报告。它通常是可能的,虽然有时很难把输入和输出都输送到另一个程序。 CGI程序以这种方式工作,产生其他语言的解释器并将数据传输给该解释器。

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

答案 1 :(得分:2)

嗯,这将是一个主要仅限链接的答案,但是从Go 1.5开始,您可以生成可以从C调用的共享库,或任何支持它的语言(也称为python,ruby,php等)

http://blog.ralch.com/tutorial/golang-sharing-libraries/

  • 这不是我的链接,我之前已经简要地按照它进行了一次虚拟python测试。