调用过程

Cgo 将Go代码编译成动态链接库,然后Java通过JNA 来调用动态链接库

1
Go ---> Cgo --> Shared libraries <--- JNA <--- Java

名词解释

Cgo:Go和C的桥梁,两者可以互相调用

JNA:一个Java框架,让Java程序更方便地使用动态链接库

Shared libraries: 动态链接库1

完整示例

https://github.com/superbear/java-call-go

内存管理

何时调用C.free释放内存

延伸阅读

Linux下跨语言调用C++实践- 美团技术团队

Go 调用 Java 方案和性能优化分享 - 阿里技术

Go 与 C 的桥梁:cgo 入门,剖析与实践

参考资料

https://github.com/freewind-demos/call-go-function-from-java-demo

https://github.com/vladimirvivien/go-cshared-examples

https://stackoverflow.com/questions/49986729/how-can-i-call-a-go-function-from-java-using-the-java-native-interface

https://stackoverflow.com/questions/47194827/how-when-do-i-free-the-memory-of-a-c-string-created-by-go-code

https://pkg.go.dev/cmd/cgo

C? Go? Cgo! The Go Blog