NodeJSからGolangでWebAssemblyビルドした関数を呼び出すサンプルになります。
Rustみたいに素直ではないGolangのWebAssemblyをなんとかしようとして、結局TSに移植する過程で負けたコードです。
デッドロックとかデッドロックとかデッドロックとかデッドロックとかに随分と時間を吸われてなんとか動くまでになったものです。
NodeJSから jiro4989/ojosama を動作させるためにせっかくだしWebAssemblyで動かしたら速度改善も望めて JSとの親和性も高くなるんじゃねと思い作っていたので中身の動作は、jiro4989/ojosama となります
wasm_exec_node.js
とwasm_exec.js
は公式が提供しているものを使用しています。
またwasm_exec.js
はGoのWebAssemblyが特殊なためそのために必要となるものです。SDK的な何かだと思ってます(多分違うけど)
Go 1.18.3を使用してビルドしています
NodeJS v16.14.2を使用して実行します
# Windows (Power Shell 7.x)
$env:GOOS="js"
$env:GOARCH="wasm"
go build -o main.wasm .
# Linux
GOOS=js
GOARCH=wasm
go build -o main.wasm *.go
node ./wasm_exec_node.js ./main.wasm
# Result
[LOG] WebAssembly Initialized
[LOG] Converting
RESULT: おハーブですわ!
ライセンスの所在はいまいちわからないので、すべて自分で書いたmain.go
はMITライセンスにしておきます。
jiro4989/ojosama は読み込んでるだけだからここに書く必要があるのかはよくわからないが、jiro4989/ojosamaのライセンスに従います。
wasm_exec_node.js
とwasm_exec.js
は公式がBSDで提供してるんでまあって感じで
自由に使ってください(使い道あるか知らないけど、あったらスターください....)