Go言語の素敵なところの一つとして、最終的な成果物を1バイナリに収めることができる、という点にあると思う。結果として、非常に簡単にコマンドラインツールなどを配布することができる。 しかし、例えばコード生成を行うようなツールでテンプレートファイルを別途持っているような場合や、アプリケーション中で使う画像などを含む場合など、Goのソースコード以外のファイルを必要とする場合、全てを1ファイルで、とはいかない。
そのような場合に便利なのがjessevdk/go-assets
である。以前は多くの人がgo-bindataを使用していたと思われるが、作者がやめてしまったため、使えなくなってしまった。代替としてこれが便利。
jessevdk/go-assetsを使用するには、まずjessevdk/go-assets-builder
を使用する。これは、指定したファイルをGoのソースコードに埋め込んで、それらを扱うためのAssets
というオブジェクトを作成してくれるツールである。
インストールは簡単で、go get
するだけ。
|
|
インストールできたら、次のように使う。
|
|
すると、assets
ディレクトリの内容が埋め込まれたassets.go
が生成される。今回は特にパッケージ名を指定していないのて、package main
として作成された。必要なら-p
オプションでパッケージ名を指定することもできる。
生成されたあとは、実際に使いたいソースコード内で次のように使う。
|
|
ここで作成されたf
はos.File
と同じインターフェースを備えている。要するに、os.Open
を使用したときと同じように操作することができる。
また、Assets
という変数を別に使いたいときは、go-assets-builderでパッキングするときに-v
オプションで変数名を指定することもできる。ディレクトリ全体ではなく、個別のファイルを指定することもできる。