私の質問は本当にそれだけですが、答えられたことは興味深いことだと思います。
3 に答える
node.js のネイティブ モジュールは、gc、javascript コンテキストなどの多くの v8 コンセプトを含む V8 プロセスと深くやり取りする必要があります。
また、V8 が他の言語と対話するための互換性のある安定した API を公開しているとは思いません。そのため、node.js ネイティブ アドオンは C++ でビルドする必要があり、常に V8 C++ ヘッダーをインポートします。
ただし、GO コードを C++ でラップすることにより、GO を使用して node.js ネイティブ アドオンを作成できます。
ファイル: module.go
package main
func Add(a, b int) int {
return a + b
}
ファイル: module.c
#include <node.h>
#include <v8.h>
using namespace v8;
extern int go_add(int, int) __asm__ ("example.main.Add");
void init(Handle<Object> exports) {
// call go_add
}
NODE_MODULE(module, init)
「C/C++ から GO functionn を呼び出す方法」の詳細:
編集:
@jdi のコメントとリンクを参照してください: https://groups.google.com/forum/#!msg/golang-nuts/FzPbOwbTlPs/dAJVWQHx6m4J
引用: add のような単純なこと (ガベージを生成せず、ランタイムを必要としない) には実行できるかもしれませんが、私の知る限り、どちらのコンパイラでも (まだ) サポートされていません。作業の一部は Linux 用に行われています (golang.org/issue/256 を参照)、未解決の問題がいくつかあります (2 つの共有オブジェクトをロードするとどうなるかなど)。
これをコメントではなく回答として再投稿するだけです...
Go で他の言語の拡張機能を作成するためのサポートに関して、golang-nuts メーリング リストをフォローアップしました。応答のソースは、ここにあります。
add (ガベージを生成せず、ランタイムを必要としない) のような単純なことには実行できるかもしれませんが、私の知る限り、どちらのコンパイラでも (まだ) サポートされていません。作業の一部は Linux 用に行われています ( golang.org/issue/256を参照)、未解決の問題がいくつかあります (2 つの共有オブジェクトをロードするとどうなるかなど)。
実際のところ、Go で拡張機能を作成してもあまり意味がないように思えますが、ほとんどの言語機能は利用できず、エントリ ポイントのラッパーを追加するためにすでに C/C++ の世界にいることになります。 .