Goのビルドスクリプトまわりの雑メモ
upx
バイナリサイズの圧縮に使われるようで、zipやgzipよりも圧縮率が高いことを謳っており、実行時も自己解凍して実行できるため実行バイナリの圧縮に広く使われているらしい。
dockerのイメージに配置するバイナリに関してはdocker pull時にgzip圧縮されており、upx圧縮したバイナリを配置してもそんなに大きなメリットはなさそうらしい。むしろ自己解凍バイナリも含むからかわからないがバイナリサイズが大きくなる可能性もあるとか。
参考
goのビルドした実行バイナリをサーバーで直接実行するようなケースではupxを使う利点はありそうということか。
-ldflags -X
Go buildのオプション。変数の値を書き換えられるよう。書き換えには条件があってトップレベルでvarで宣言された文字列のみ変更可能なようです。
参考
C言語では馴染みのようだがLDFLAGSはリンカへのフラグに使われていて、リンカに引数を渡すときにGoでは-ldflagsを使うよう。
-ldflags "-w -s"
Goのビルドサイズを小さくするのに指定する。-wはシンボル表を実行バイナリから削除する。-sはデバッグ情報を実行バイナリから削除する。開発時にはデバッグするためあったほうがいいがリリース用には実行バイナリサイズを小さくするために上記オプションを指定することが多いよう。ただ、何かトラブルがあった時の調査の観点から一概には言えないようなのでケースバイケースと理解。
pushd/popd
Go関係ないけど。カレントディレクトリの移動などで使われスクリプトファイルなどでよく使われよう。pushdでディレクトのパスを指定することでスタックにパス情報を追加してディレクトの移動をして作業が終わったらpopdでスタックからパスを取り出し、元の場所に戻るみたいな使い方がされるよう、たぶん。
ただ、スクリプトの実行ユーザーがパスへの移動権限がないとエラーになる場合があるのでそのようなケースではサブシェルで実行するといいらしい。