jessevdk/go-assetsでファイルを埋め込む


1 min read
jessevdk/go-assetsでファイルを埋め込む

Go言語の素敵なところの一つとして、最終的な成果物を1バイナリに収めることができる、という点にあると思う。結果として、非常に簡単にコマンドラインツールなどを配布することができる。
しかし、例えばコード生成を行うようなツールでテンプレートファイルを別途持っているような場合や、アプリケーション中で使う画像などを含む場合など、Goのソースコード以外のファイルを必要とする場合、全てを1ファイルで、とはいかない。

そのような場合に便利なのがjessevdk/go-assetsである。以前は多くの人がgo-bindataを使用していたと思われるが、作者がやめてしまったため、使えなくなってしまった。代替としてこれが便利。
jessevdk/go-assetsを使用するには、まずjessevdk/go-assets-builderを使用する。これは、指定したファイルをGoのソースコードに埋め込んで、それらを扱うためのAssetsというオブジェクトを作成してくれるツールである。

インストールは簡単で、go getするだけ。

$ go get github.com/jessevdk/go-assets-builder

インストールできたら、次のように使う。

$ ls assets/
foo.html.tmpl bar.png
$ go-assets-builder assets -o assets.go

すると、assetsディレクトリの内容が埋め込まれたassets.goが生成される。今回は特にパッケージ名を指定していないのて、package mainとして作成された。必要なら-pオプションでパッケージ名を指定することもできる。
生成されたあとは、実際に使いたいソースコード内で次のように使う。

f, _ := Assets.Open("/assets/foo.html.tmpl")
// in production, need to handle error
defer f.Close()
// Do something with f

ここで作成されたfos.Fileと同じインターフェースを備えている。要するに、os.Openを使用したときと同じように操作することができる。

また、Assetsという変数を別に使いたいときは、go-assets-builderでパッキングするときに-vオプションで変数名を指定することもできる。ディレクトリ全体ではなく、個別のファイルを指定することもできる。


きちんとやるnet/http
Previous article

きちんとやるnet/http

皆さん、net/httpパッケージは使っていますか? Go言語の標準パッケージであるnet/httpはPythonなどの標準HTTPパッケージに比べ、人間にとっても取り扱いがしやすいため、そのまま使用している方が多いかと思います。 しかし、このnet/httpパッケージ、簡単に使えるように見えて結構落とし穴が多いのです。 1. Response Bodyはクローズする必要がある 次のコードを見てみましょう。 resp, err := http.Get("https://example.com/api"

年越し鴨南蛮
Next article

年越し鴨南蛮

もう1月も半ばを過ぎ、まもなく2月が来る、というところで今更感を拭うことができない話題なのですが、2018年末(実は時間的には年が明けていたが)に年越しそばとして鴨南蛮を作りました。 さて、鴨南蛮なので鴨肉が必要です。今回はbuildersconの肉会などでお世話になっているミートガイさんから鴨の胸肉を購入しました。 こちらが回答した鴨肉をAnovaでやったやつです。温度は忘れたんですが、大体1~2時間くらいやったやつです。 軽く塩をした後、熱したフライパンで焼き目をつけていきます。皮を下にして、高めの温度でさっとやります。 焼き目をつけた鴨肉です。いい色ですね。 油がたくさん出ます。 鴨から出た油でネギを焼きましょう ネギを焼いている間に鴨を切ります。幸せのため少し厚切りにしましたが、鴨はすこし薄めでもいいかもしれないです。 最後にそばの上に盛り付けて完成。


GO TOP

🎉 You've successfully subscribed to something tech.!
OK