Goではコンパイル時に `-ldflag` で変数に値をセットすることができる。 だいぶ以前から知られているようだが、久保田は今日知ったのでメモ。 # 例 ```go= package main import ( "fmt" ) var ( args1 string args2 string ) func main() { fmt.Println(args1, args2) } ``` のようなスクリプトがあった場合,そのままビルドすると ``` go build main.go ./main ``` のように空文字を出力するだけだが、 ``` go build -ldflags "-X main.args1=aaa -X main.args2=bbb" ``` のようにコンパイル時にpackageと変数の値を指定すると、 ``` ./tmp14 aaa bbb ``` となり、指定した変数が代入される。 # 使いみち コミットハッシュをセットして、デバッグに役立てている例が多い。 https://ols.wtf/2021/02/20/injecting-golang-variables-at-build-time.html ``` go build -ldflags "-X main.commitHash=$$(git rev-parse --short HEAD) -X main.commitDate=$$(git log -1 --format=%ct)" ``` ``` curl localhost:1314/info {"commit":"6d168d3","date":"1613819194"} ```