goでシングルバイナリ配布っていうけどファイル突っ込みたいときどうするの? → go-bindata使おう

世間のgopherの皆様には枯れた話題なのかもしれないが、
これは知ってるか知らないかの差が大きなと思ったのでブログに書くことにした。

golangの特徴として「実行ファイルを1ファイルおけばどこでも実行できる」というのがある。
じゃあイケてるAPIサーバをgoで書いてhtmlとcssとjsでUIつくってどこでも実行できるぜいえーい、というのを目指そうとすると困ることがある。
それはシングルバイナリで配布したらhtmlとcssとjsファイルを含められないということである。

じゃあどうすればいいんだろう、というかできないのかなと思ってたんだけどそんなことはない。
簡単なことでバイナリにしてもっておけばそれを書くだけで事足りる。
(実際にはファイルを突っ込んでいるわけではないがまあそれはおいといて)

go-bindataというツールがあって、こいつが静的なファイルをバイナリデータに変換してくれる。
そして実行時に呼び出すための関数も提供してくれる。

github.com

使い方は簡単で go-bindata target -o path/to/dst.go -pkg package-name でおk
-pkgは指定しないとmainになるのでお好きにどうぞ。

これでシングルバイナリでhtml + css + js + APIサーバが構成できるぜやったー


とここまで書いて思い出したんだけどmattnさんのmkupもhtmlを提供してたなって思ったらやっぱりgo-bindataを使ってるように見えました。

github.com