以前後輩と話ていてWeb Assemblyに興味を持ちました.
JavaScriptより自分の好きな言語でフロントエンドを書けたらいいなと思い調べてみることにしました.
そんな中,こちらの記事(サクッと Go → WebAssembly を試す)を見つけたのでやってみました.
まず,Macでgoのバージョンをあげます.
1 | brew upgrade go |
goでWebアセンブリにコンパイルするコードを書いた.
1 | package main |
コンパイルしました.
1 | GOOS=js GOARCH=wasm go build -o test.wasm main.go |
そして,htmlとJavascriptを用意します.
ただし記事を参考して用意すると,以下のように実行時にエラーを引き起こしました.
1 | > wasm_exec.html:36 LinkError: WebAssembly.instantiate(): Import #3 module="go" function="runtime.nanotime" error: function import requires a callable |
調べてみるとこちらのIssue(can’t run wasm module in browser: LinkError: WebAssembly Instantiation #29827)を発見しました.
masterブランチにあるwasm_exec.jsを取ってくると起こる現象なので,自分のgolangのバージョンのものを取ってくるといいらしい.
なので,以下のようにして用意しました.
1 | cp "$(go env GOROOT)/misc/wasm/wasm_exec.html" . |
go getでgoexecを取ってきて,goexecでサーバーをたてます.
1 | go get -u github.com/shurcooL/goexec |
以下のリンクにアクセスして,コンソールを広げつつRUNボタンをおすと.
http://localhost:8080/wasm_exec.html
Hello, wasm!
と表示されれば成功です.
所感としては,CやC++に比べるとGoをWeb Assemblyで扱うのはめちゃめちゃ簡単.
ただ一方で近年人気急上昇中のRustの方がWasmは盛り上がってきているように見えるので,Rustも試してみてみたい.
さて続きは次回にするのですが,Go WebAssemblyで調べてみると,以下の記事が参考になりそうです.
色々試してみたいと思っています.
- Golang Wiki: WebAssembly
- GoではじめるWebAssebmly その1「Hello World」
- Go言語で正式にWebAssemblyがサポートされたので軽くDOM操作してみる
- Go × WebAssemblyで電卓のWebアプリを作ってみた
- golangでVuguを試してみた。
ちなみに,こちらのトップページの絵は創作したものです.
グリザイア手法という描き方を知り,試しに描いてみました.
Gopherちゃんと言います.
ロゴタイトルはこちらを使わせてもらいました.