Go 言語の wasm 対応状況
Go 1.11 wasm における Go の言語機能サポートは
- goroutine も channel も使えるっちゃ使える
- wasm にはマルチスレッドの機能がない
- そもそも goroutine/channel はシングルスレッドでも動くからね
- wasm にはマルチスレッド機能が入るかも
- なんと GC も動く
- wasm には GC がいまのところないがいずれ入れる予定もあるらしい
- スレッドや GC の機能は、スタックをヒープ上に置くことでエミュレートしているらしい
ビルドの仕方
- たとえばいつもの hello world (main.go とする) があったとして、
package main
import "fmt"
func main() {
fmt.Println("hello world!")
}
- ビルドは以下のようにする。普通にクロスコンパイルする場合と同じ。
GOOS=js GOARCH=wasm
としてクロスコンパイル
$ GOOS=js GOARCH=wasm go build -o main.wasm main.go
補足: Go のクロスコンパイルについて
- Go はビルド時に GOOS と GOARCH に色々パラメータを指定することでクロスコンパイルできる
- GOOS には linux、windows、darwin、等が指定できる
- GOARCH には arm、arm64、386、amd64、mips、mips64、等が指定できる
$ GOOS=linux GOARCH=arm64 go build
$ GOOS=windows GOARCH=386 go build