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
のエラーが出る場合は、型の変換が上手くいってないのでここを参照
記事によってはここの情報が古くなっている場合がよくある。