概要
前回、ビルド時に -ldflags
を使ってパッケージ情報を埋め込むサンプルを記載しました。
Go 1.16 から embed パッケージが追加されたので、今後はこれ使ったほうが楽かもって思いました。
ついでにサンプル作ったので、以下にメモメモ。
サンプル
それぞれ別々のファイルにしておいて埋め込む
/* Go 1.16 から追加された embed パッケージを利用して内部の変数に外部ファイルデータを埋め込むサンプルです. Commands: $ git describe --tags --abbrev=0 > version.txt $ git rev-list -1 HEAD > revision.txt $ git describe --tags > build.txt $ go run . */ package main import ( _ "embed" "fmt" "os" ) // Version and Revision // // Commands: // $ git describe --tags --abbrev=0 > version.txt // $ git rev-list -1 HEAD > revision.txt // $ git describe --tags > build.txt var ( //go:embed version.txt version string //go:embed revision.txt revision string //go:embed build.txt build string ) func main() { os.Exit(run()) } func run() int { fmt.Printf("Version : %s\n", version) fmt.Printf("Revision: %s\n", revision) fmt.Printf("Build : %s\n", build) return 0 }
実行すると以下のようになります。
default: run prepare: @git describe --tags --abbrev=0 > version.txt @git rev-list -1 HEAD > revision.txt @git describe --tags > build.txt run: prepare @go run -race .
gitpod /workspace/try-golang $ (cd ./cmd/version_and_revision/with_embed; make) Version : v0.2.3 Revision: 22c87c3668ec147d3d412afc1e7b6466611dbdde Build : v0.2.3-79-g22c87c3
一つのファイルにバージョンとかをまとめておいて埋め込む
/* Go 1.16 から追加された embed パッケージを利用して内部の変数に外部ファイルデータを埋め込むサンプルです. Commands: $ git describe --tags --abbrev=0 > version.txt $ git rev-list -1 HEAD >> version.txt $ git describe --tags >> version.txt $ go run -race . */ package main import ( "bytes" _ "embed" "fmt" "os" ) type version []byte func (v version) String() string { buf := bytes.NewBuffer(v) get := func() string { v, _ := buf.ReadString('\n'); return v } return fmt.Sprintf("Version : %sRevision: %sBuild : %s", get(), get(), get()) } //go:embed version.txt var v []byte func main() { os.Exit(run()) } func run() int { fmt.Print(version(v)) return 0 }
実行すると以下のようになります。
default: run prepare: @git describe --tags --abbrev=0 > version.txt @git rev-list -1 HEAD >> version.txt @git describe --tags >> version.txt run: prepare @go run -race .
gitpod /workspace/try-golang $ (cd ./cmd/version_and_revision/with_embed2; make) Version : v0.2.3 Revision: eee95c82887f9606663eed84643cec6d6cd0b4c6 Build : v0.2.3-80-geee95c8
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場