WebAssembly / Go

Go言語が、WebAssemblyを標準でサポートしているということで、実際に動かしてみました。
ブラウザでJavaScript経由で呼び出します。

参考)
https://atmarkit.itmedia.co.jp/ait/articles/2305/19/news002.html

環境は前回のProtocolBufferと同じで、Go は、v1.20.5 です。

前準備

mkdir go_wasm
cd go_wasm
go mod init sample
go get github.com/shurcooL/goexec
go install github.com/shurcooL/goexec@latest

main.go (用意するのはこれだけ)

コンパイル

GOOS=js GOARCH=wasm go build -o test.wasm main.go

ファイル確認

% file test.wasm
test.wasm: WebAssembly (wasm) binary module version 0x1 (MVP)

Webで実行させるために生成されたファイルをカレントにコピー
cp $(go env GOROOT)/misc/wasm/wasm_exec.js .
cp $(go env GOROOT)/misc/wasm/wasm_exec.html .

WebServerの起動

~/go/bin/goexec ‘http.ListenAndServe(:8080, http.FileServer(http.Dir(.)))’

実行結果

参考サイトそのままですが、それだけ何もいじることをしなくても良い、というシンプルな仕組みになっています。
miscフォルダにrunボタンでwasmを実行するjsとhtmlを生成することは、至れり尽くせりだと思いました。

wasmは、バイナリでありながら様々な場所で実行できるため、いろいろな使われ方をします。またGoも様々な使われ方を考えたいろいろな機能を持っています。今回はとりあえず、やってみた、という感じですが、次はデータのやり取りなどやってみようと思っています。

以下にhtmlを引用します。jsはサイスが大きいためとりやめ。
wasm_exec.html

About

Categories: 未分類 タグ: ,