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

标签 java python go callback

我正在开发一个库,它将用 Go 编写并编译成一个 C 共享库,这样它就可以被 Python 等语言调用、Node.JSJavaRuby

我刚刚意识到回调会有问题。我怎样才能回调至少是上述语言之一的调用代码?有没有一种方法可以做到这一点,或者我是否需要在 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(JavaPython)进行不同的设计。如果您有适当的绑定(bind),也许您已经解决了这个问题?如果您可以不将任何参数传递给回调(即它基本上是一个计时器回调),这可能会更容易。尽量减少需要在 Go 中生成并以其他语言读取的数据。

关于java - 将 c-shared 库回调转换为其他语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36394472/

相关文章:

java - 为什么aspose word RunparentNode可以是StructuredDocumentTag

go - ide在$ GOPATH中找不到软件包shim和proto软件包

go - 通过 SSH golang 连接到 mongoDB

python - 带有自签名证书的 Authlib SSLError

go - web.Request 结构的字段状态未在 Golang 中正确克隆

java - 我可以在另一个注释中使用属性中的 Spring @Value 变量吗?

java - 如何让 Callable 等待执行?

java - 如何从 BLE 设备接收数据?

python - Django REST Framework 序列化器验证错误

Python - SOAP 水 - 没有模块