JavaからGoメソッドを呼び出す方法は?
JavaからGolangのメソッドを呼び出すには、通常CGO(C言語からGo関数を呼び出す)という技術が使われます。CGOは、Go言語が提供する仕組みで、GoコードをC/C++コードと相互運用できます。
JavaからGoのメソッドを呼び出すには、次の手順に従います。
最初にgolangで作ったコードを、共有オブジェクト(.soファイル)に変換します。 `go build -buildmode=c-shared -o libgo.so gofile.go` コマンドを実行することで共有オブジェクトが生成されます。ここで、`gofile.go` は golang で記述されたコードファイルです。
Java の JNI(Java ネイティブ インターフェイス)機構を利用して、動的リンクライブラリをロードし、Java と Go の対話を実現します。JNI は、Java コードがネイティブコード(C/C++ など)と対話することを可能にする Java によって提供される機構です。
JNIが提供する関連APIを使用してJavaコードからGoメソッドを呼び出す
では、簡単なサンプルコードを示します:
Go言語で、整数を 1 増やす単純なメソッドを定義する:
package main
import "C"
//export AddOne
func AddOne(num C.int) C.int {
return num + 1
}
func main() {}
動的リンクライブラリにコンパイルする
go build -buildmode=c-shared -o libgo.so gofile.go
Java でこのメソッドを呼び出すには、
public class Main {
static {
System.loadLibrary("go"); // 加载Golang生成的动态链接库
}
public static native int AddOne(int num); // 定义native方法
public static void main(String[] args) {
int result = AddOne(5); // 调用Golang的方法
System.out.println(result); // 输出6
}
}
JavaからGoのメソッドを呼び出すときには、Goのコードのエクスポート関数がCGOから認識されるようにする必要があります。上記の例では、//exportアノテーションを使用してGoの関数をエクスポートし、CGOから呼び出すことができるようにしています。
さらに、生成された動的リンクライブラリをロードするためにJavaコードでSystem.loadLibrary(“go”)を使用する必要があります。
より複雑な相互作用が必要な場合は、CGO と JNI のドキュメントを参照して、詳細な理解と実装を行ってください。