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、等が指定できる
# 64-bit の Arm Linux 向けビルド
$ GOOS=linux GOARCH=arm64 go build

# 32-bit の windows 向けビルド
$ GOOS=windows GOARCH=386 go build

results matching ""

    No results matching ""