实践总结:在 Java 中调用 Golang Go语言代码

实践总结:在 Java 中调用 Golang Go语言代码
https://liujiacai.net/blog/2020/08/08/go-meet-java/

14 回复

想知道为什么不通过 rpc 通信的方式,和 cgo 调用优劣在哪,我个人比较倾向前者

更多关于实践总结:在 Java 中调用 Golang Go语言代码的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


写成接口出来调用比较合适,两个带 GC 的语言之间根本没法共享内存,相互调用麻烦且低效。

有没有碰到线程问题?我在 Unity 的 C#中调用 go 的时候发现在 go 中开 goroutine 会卡死,以及各个平台传递数据的方式是不太一样的,具体使用方式在 https://github.com/sunny352/Example_Unity_Plugin_Go

走管道吧 或者网络也行

rpc 吧,简单方便

借楼问一下,以前一直一位 RPC 跟 API 请求没啥两样,刚搜了下,好像还不太一样。

API 不限语言,RPC 需要 client 跟 server 开发语言一致? 而且感觉 RPC 的话 client 跟 server 有大量重复代码(定义接口之类),是不是更麻烦些?

#1 看依赖服务的情况吧,如果就依赖一两个功能,JNA 方便些。rpc 调用的话, 相当于整条链路上多了一跳,服务的治理、维护、升级都是不小的问题

rpc 服务端客户端语言可以不一样吧

当然可以不一样了,只要 rpc 是一套协议就行

RPC 也是一种 API

那我感觉没啥大的区别啊。

或者说借助一些 rpc 库可以实现自动 http 调用,跟本地调用一样?而 API 需要自己手动调用?

两个层面的东西,HTTP 接口也可以看做 RPC 的一种,只不过具体是用 HTTP 协议来实现的。RPC 是一个很宽泛的概念。

在Java中调用Golang(Go)代码,通常涉及到跨语言调用的技术,如通过HTTP接口、RPC(远程过程调用)、或者共享内存(如通过C语言作为中间层)来实现。以下是一些常见的实践总结:

  1. HTTP接口

    • 这是最常见的方法之一,Go语言可以提供一个HTTP服务,Java通过HTTP请求来调用Go提供的接口。
    • 优点:简单、解耦、容易扩展。
    • 缺点:性能可能不如直接调用高,且增加了网络通信的复杂性。
  2. RPC

    • 可以使用gRPC这样的框架,它支持多种语言,包括Java和Go。
    • 优点:高性能、支持双向流、自动生成代码。
    • 缺点:需要学习新的框架和工具链,实现相对复杂。
  3. 共享内存

    • 通过C语言作为中间层,Java通过JNI(Java Native Interface)调用C代码,C代码再调用Go代码。
    • 优点:性能高,直接内存访问。
    • 缺点:实现复杂,需要处理多语言间的内存管理问题。
  4. 消息队列

    • 使用如Kafka、RabbitMQ等消息队列,Java和Go通过消息队列进行通信。
    • 优点:解耦、支持异步处理。
    • 缺点:增加了系统复杂度,且需要处理消息队列的可靠性问题。

在选择方法时,需要根据具体的应用场景、性能需求、团队的技术储备等因素综合考虑。对于大多数应用来说,HTTP接口和RPC是比较推荐的方法。

回到顶部