我正在开发一个库,它将用 Go 编写并编译成一个 C 共享库
,这样它就可以被 Python
等语言调用、Node.JS
、Java
和 Ruby
我刚刚意识到回调会有问题。我怎样才能回调至少是上述语言之一的调用代码?有没有一种方法可以做到这一点,或者我是否需要在 Go 端为每种语言实现一些特定的东西?
为清楚起见更新:
我已经能够将 Go 构建为库并执行来自其他语言(例如 Java 和 Python)的代码。
我的问题具体涉及 go 异步运行某些东西并需要回调调用者(即 Java、Python)的情况。
最佳答案
不同编程语言之间接口(interface)的通用语言是通过 C。您可以使用类似 cgo 的语言。使您的 Go 代码可通过 C 访问,然后使用 C 或 Python、Java 等中的“ native ”绑定(bind)来调用它。
通常,开发人员只会在维护良好的大型项目中遇到这么多麻烦。如果你有一个个人项目并且性能不是那么重要,我会建议通过 json(用于网络语言)或 stdout/stderr 管道(可能更多你想要的)进行通信。您可以从 Ruby 将命令打印到标准输出,然后让您的 Go 代码处理请求并在其标准输出上进行报告。将输入和输出都通过管道传输到另一个程序通常是可能的,尽管有时会很棘手。 CGI 程序以这种方式工作,产生其他语言的解释器并将数据传输到该解释器。
更新:如果您想传递对象,从 Go 回调到 Java/Python/任何语言运行时是很困难的;我想这需要根据绑定(bind) API(Java、Python)进行不同的设计。如果您有适当的绑定(bind),也许您已经解决了这个问题?如果您可以不将任何参数传递给回调(即它基本上是一个计时器回调),这可能会更容易。尽量减少需要在 Go 中生成并以其他语言读取的数据。
关于java - 将 c-shared 库回调转换为其他语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36394472/