🐁
GoでWebAssembly
Goで簡単にwasmのコンパイルができるとのことで、とりあえずやってみます。
Hello World
Goで文字列を出力するだけのコードを書きます。
// main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, WebAssembly!")
}
wasmファイルのビルド。
# Windowsの場合
$ GOOS=windows GOARCH=386
# MacOSの場合
$ GOOS=linux GOARCH=amd64
$ GOOS=js GOARCH=wasm go build -o main.wasm
GOROOTからwasm_exec.jsをコピーしてきて、
$ cp `go env GOROOT`/misc/wasm/wasm_exec.js .
wasmファイルを読み込むindex.htmlを用意。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script src="wasm_exec.js"></script>
<script>
const go = new Go();
WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then((result) => {
go.run(result.instance);
});
</script>
</body>
</html>
httpサーバーを立てるコードを書いて、
// server.go
package main
import (
"log"
"net/http"
)
func main() {
const addr = "localhost:8080"
log.Fatal(http.ListenAndServe(addr, http.FileServer(http.Dir("."))))
}
実行。
$ go run server.go
localhost:8080を開いて、コンソール画面に文字列が出力されれば成功です。
簡単!
Discussion