WebAssembly

Option 1. WasmServe

If you want to see your game working on browsers, wasmserve is the easiest way.

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

Then access http://localhost:8080/.

Option 2. Compiling by yourself

If you want to publish your game, you'd need to compile your game by yourself.

Compiling your game

On a Unix/Linux shell:

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

On 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

Copying wasm_exec.js to execute the WebAssembly binary

On a Unix/Linux shell:

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

On Windows PowerShell:

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

Creating an HTML

Create this 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>

Then open this HTML in your browser. You might need a local HTTP server.

If you want to embed your game into your web page, using iframe is strongly recommended. The screen scale is automatically adjusted. If the above HTML's name is main.html, the host HTML will be like this:

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

You might find this message with 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

In this case, you can solve this by putting allow="autoplay" on the iframe.

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" を追加すると解決するかもしれません。