TL;DR
- Go 1.11でModules、WebAssemblyへの試験的な対応など、いくつかの大きな変更と既存パッケージの改良などがあった
- WebAssembly(以下Wasm)のGo公式wikiが親切でわかりやすい!筋トレしたくなってきた!ʕ◔ϖ◔ʔ
やったことメモ
Hello Wasm!
ソースコードは kemokemo/wasmgo-sketchbook/hello-wasm にあります。shellにfishを使ってるので公式wikiと若干コマンドが違います。 🐟
まずwasm形式にビルドします。
env GOOS=js GOARCH=wasm go build -o main.wasm
動作に必要なjsファイルをカレントディレクトリにコピーします。
cp (go env GOROOT)/misc/wasm/wasm_exec.js .
goexec
で即座にServeします。(goexecめちゃくちゃ便利ですね!)go get -u github.com/shurcooL/goexec goexec 'http.ListenAndServe(":8080", http.FileServer(http.Dir(".")))'
ここまでできたら http://localhost:8080/index.html にアクセスします。
以下のようなページが表示されたら成功です!!ʕ◔ϖ◔ʔ ウワォ
DOMをいじってみる
ソースコードは kemokemo/wasmgo-sketchbook/dom-control にあります。syscall/js
を使います。IDベースでボタンを探して、イベントハンドラを追加します。func pressed(args []js.Value) { fmt.Println("button clicked") } func registerCallbacks() { js.Global().Get("document").Call("getElementById", "myButton").Call("addEventListener", "click", js.NewCallback(pressed)) } func main() { c := make(chan struct{}, 0) fmt.Println("Go wasm initialized.") registerCallbacks() <-c }これを動かすと、以下の動画のようにボタンを押すたびに
button clicked
というログがでます。
あとがきみたいなの
今回実施できなかったのですが、Wasmで以下のようなこともやってみたい。- ボタン操作のハンドラーで外部のWebAPIから情報をフェッチ
- フェッチしてきた情報をGoコード側で変換、整形して表示
- この時、今回Go 1.11で改良されたテンプレート初期値機能を使いたい
0 件のコメント:
コメントを投稿