28

私の質問は本当にそれだけですが、答えられたことは興味深いことだと思います。

4

3 に答える 3

11

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 を呼び出す方法」の詳細:

C から Go 関数を呼び出す


編集:

@jdi のコメントとリンクを参照してください: https://groups.google.com/forum/#!msg/golang-nuts/FzPbOwbTlPs/dAJVWQHx6m4J

引用: add のような単純なこと (ガベージを生成せず、ランタイムを必要としない) には実行できるかもしれませんが、私の知る限り、どちらのコンパイラでも (まだ) サポートされていません。作業の一部は Linux 用に行われています (golang.org/issue/256 を参照)、未解決の問題がいくつかあります (2 つの共有オブジェクトをロードするとどうなるかなど)。

于 2013-12-22T11:27:58.500 に答える
3

これをコメントではなく回答として再投稿するだけです...

Go で他の言語の拡張機能を作成するためのサポートに関して、golang-nuts メーリング リストをフォローアップしました。応答のソースは、ここにあります

add (ガベージを生成せず、ランタイムを必要としない) のような単純なことには実行できるかもしれませんが、私の知る限り、どちらのコンパイラでも (まだ) サポートされていません。作業の一部は Linux 用に行われています ( golang.org/issue/256を参照)、未解決の問題がいくつかあります (2 つの共有オブジェクトをロードするとどうなるかなど)。

実際のところ、Go で拡張機能を作成してもあまり意味がないように思えますが、ほとんどの言語機能は利用できず、エントリ ポイントのラッパーを追加するためにすでに C/C++ の世界にいることになります。 .

于 2014-01-04T03:04:51.773 に答える