Open5
GoでWebAssembly
wasm用にコンパイルする
$ GOOS=js GOARCH=wasm go build -o main.wasm
ブラウザでGoのwasmファイルを実行するのに必要なJSファイルwasm_exec.jsをコピー
cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
Goが生成するwasmファイルはかなり大きくなるが、TinyGoを使うとかなり小さくできる
TinyGo is a Go compiler intended for use in small places such as microcontrollers, WebAssembly (wasm/wasi), and command-line tools.
例
main.go
package main
func main() {
println("Hello, World!")
}
buildする。かなり違う。
$ GOOS=js GOARCH=wasm go build -o main.wasm main.go
$ tinygo build -o wasm.wasm -target wasm main.go
$ ls -lh
~
1.3M 10 27 07:48 main.wasm. (Go)
83K 10 27 07:48 wasm.wasm. (TinyGo)
HTMLでのJS実装例
Goのsyscall/jsパッケージについて
func ValueOf
サポートされている型と、その変換
| Go | JavaScript |
|---|---|
| js.Value | [its value] |
| js.Func | function |
| nil | null |
| bool | boolean |
| integers and floats | number |
| string | string |
| []interface{} | new array |
| map[string]interface{} | new object |
ブラウザ上でValueOf: invalid valueのエラーが出る場合は、型の変換が上手くいってないのでここを参照
記事によってはここの情報が古くなっている場合がよくある。