如何在Golang中使用Jar文件?

如何在Golang中使用Jar文件?,jar,go,Jar,Go,是否可以在Go代码中使用jar文件类方法。如果是这样,请转发给我相同的链接。我已经在网上查过了 GoDoc/github.com/code.google 但是没有这样的包构建。只有在极其迂腐的意义上,才“可能”在理论上可以在Go中编写某种JVM环境,可以运行JVM字节码,这些字节码恰好与Go分配的内存交互 在任何实际意义上,Java(和Scala等)以完全不同的方式编译,这样做是不可行的。这一点尤其复杂,因为Go有自己的运行时,这也使反向操作复杂化(从Java运行Go函数) 如果您需要使用Go的

是否可以在Go代码中使用jar文件类方法。如果是这样,请转发给我相同的链接。我已经在网上查过了

GoDoc/github.com/code.google

但是没有这样的包构建。

只有在极其迂腐的意义上,才“可能”在理论上可以在Go中编写某种JVM环境,可以运行JVM字节码,这些字节码恰好与Go分配的内存交互

在任何实际意义上,Java(和Scala等)以完全不同的方式编译,这样做是不可行的。这一点尤其复杂,因为Go有自己的运行时,这也使反向操作复杂化(从Java运行Go函数)

如果您需要使用Go的Java代码进行通信,我建议您研究一下,您可以作为一个单独的进程启动Java程序,并通过本地网络协作调用方法。这需要一点努力,但不是很多。这当然比编写真正从Go调用Java方法的框架要容易

另一种方法是使用
os/exec
调用Java程序,将它们输出到文件或命令行,然后读入该输出并对其进行解析,但这比RPC脆弱得多,而且容易出现错误和安全漏洞


正如Evan在评论中提到的,您可以使用带有C入口点的JNI(Java本机接口)。因此,使用Cgo可以启动JVM并调用Java代码。站点似乎有一个关于如何在C和C++中设置教程的教程。我不太熟悉从这个方向使用JNI,所以我不能真正推荐它,也不能劝阻您使用它。不过,它确实在构建过程中引入了C依赖项,所以请注意。

我有一个类似的用例。我使用卡夫卡作为信息总线。生产者是scala,消费者是go应用程序。这是天衣无缝的。最好的部分是,它可以在任何分布式设置上扩展

对不起,那是不可能的。Java与Go无关。您到底想对jar文件做什么?如果你只是想读出它,请记住jar文件只是一个带有不同后缀的zip文件。第三种选择是使用Java本机接口()和CGo()@Evan编写一个C桥——我实际上不知道这是有效的,我认为JNI就像CGo:它必须以Java程序作为入口点来调用。我要补充一点,你链接到的JNI绑定生成器已经移动到jag,看起来已经死了。