WebAssembly

オプション 1. WasmServe

ゲームがブラウザ上で動くのを確認するのであれば、 wasmserve が最も簡単な方法です。

go run github.com/hajimehoshi/wasmserve@latest ./path/to/yourgame

次に http://localhost:8080/ にアクセスしてください。

オプション 2. 自前でコンパイル

ゲームをパブリッシュするのであれば、ゲームを自分でコンパイルする必要があります。.

ゲームのコンパイル

Unix/Linux シェルの場合:

env GOOS=js GOARCH=wasm go build -o yourgame.wasm github.com/yourname/yourgame

Windows PowerShell の場合:

$Env:GOOS = 'js'
$Env:GOARCH = 'wasm'
go build -o yourgame.wasm github.com/yourname/yourgame
Remove-Item Env:GOOS
Remove-Item Env:GOARCH

WebAssembly バイナリを実行するための wasm_exec.js のコピー

Unix/Linux シェルの場合:

cp $(go env GOROOT)/misc/wasm/wasm_exec.js .

Windows PowerShell の場合:

$goroot = go env GOROOT
cp $goroot\misc\wasm\wasm_exec.js .

HTML の作成

次のような HTML を作成してください:

<!DOCTYPE html>
<script src="wasm_exec.js"></script>
<script>
// Polyfill
if (!WebAssembly.instantiateStreaming) {
    WebAssembly.instantiateStreaming = async (resp, importObject) => {
        const source = await (await resp).arrayBuffer();
        return await WebAssembly.instantiate(source, importObject);
    };
}

const go = new Go();
WebAssembly.instantiateStreaming(fetch("yourgame.wasm"), go.importObject).then(result => {
    go.run(result.instance);
});
</script>

この HTML をブラウザで開いてください。ローカル HTTP サーバーが必要になるかもしれません。

もしあなたのサイトにゲームを埋め込みたいのであれば、 iframe を使うことを強く推奨します。スクリーンスケールは自動的に調整されます。上の HTML の名前が main.html として、ホスト側の HTML は次のようになります:

<!DOCTYPE html>
<iframe src="main.html" width="640" height="480"></iframe>

Chrome で次のようなメッセージが表示されるかもしれません:

The AudioContext was not allowed to start. It must be resume (or created) after a user gesture on the page. https://goo.gl/7K7WLu

この場合、 iframe に allow="autoplay" を追加すると解決するかもしれません。