C# - ソースを実行ファイルに埋め込む方法 - Qiita
http://qiita.com/ymko/items/7cf9a19e03ba9dcebfaa
のgolang版
ツールの準備
$ go get -u github.com/jteeuwen/go-bindata/...
$ which go-bindata
~/.go/bin/go-bindata
ソースの準備
- data/以下ハードリンクして置いておくことがミソ
- build -o で出力ファイル名を指定
- 再帰的にやるにはどうしよう・・・
$ cat main.go
package main
import (
"log"
"fmt"
)
//go:generate go-bindata data/
//go:generate go build -o srcres
func main () {
data, err := Asset("data/main.go")
if err != nil {
// Asset was not found.
log.Fatalln(err)
}
fmt.Println(string(data))
}
$ mkdir data
$ ln main.go data/
コンパイル&実行
$ go generate
$ ./srcres
デバッグ実行
- デバッグ実行する場合はAsset()を呼べるようにbindata.goも指定しないといけない
$ go run main.go
# command-line-arguments
./main.go:13: undefined: Asset
$ go run bindata.go main.go
参考
go-bindata でコンパイル時にリソースを埋め込んじゃおう! - Qiita
http://qiita.com/ikawaha/items/c02d84cfd00f8f442500
アセット的なアレを実行バイナリ内に入れる話。
http://blog.satotaichi.info/one-binary-using-go-bindata/
go-bindataをgo:generateで実行する - きょこみのーと
http://kyokomi.hatenablog.com/entry/2015/01/17/211502