Chapter 12

TinyGoかGoか

NoboNobo
NoboNobo
2020.10.04に更新

デプロイ時にTinyGoコンパイラツールチェインを利用すると、WASMサイズは4〜5分の1程度に小さくなります。
このコンパイラツールチェインの選択の基準は

「GoにできてTinyGoにできないことがどうしても必要な場合はGoを選択」

ということになります。WASM出力に関するGoとTinyGoにできないことを列挙してみます。

  • refletctパッケージが完全には動作しない。
  • reflectパッケージ依存の他のパッケージの多くが動作しない。
  • 特に厳しいのはフロントエンドに関連深いものとして「encoding/json」が使えないこと。

encoding/jsonの代わりになれるTinyGo対応マーシャラーとしてはmoznionさんのhttps://github.com/moznion/go-json-iceがあります。
TinyGo対応パーサーとしてはbugerさんのhttps://github.com/buger/jsonparserが使えるのではないでしょうか。

JSONに関してはJS側の以下の処理は使えるのでこれらを使う形で実装すればGoとTinyGoの両対応は可能です。(こちらは必ずブラウザ環境で動作させるのが必須ということになります。)

  • JSON.parse
  • JSON.stringify