goコマンド『build』

Go言語に組み込まれているコマンド『build』についてまとめました。

動作環境

ホストOSWindows 10 21H1(19043.2130) 64bit
WSL2
Visual Studio Code1.70.2
Docker Desktop4.12.0(85629)
Go1.19.2

構文

# Go言語で書かれたソースファイルをビルドする

go build [オプション]

# 良く使うオプション
-x:ビルド過程を出力する
-o [実行ファイル名]:生成される実行ファイル名を指定する

サンプル

.
├── app
│   ├── lib
│   │   └── lib.go
│   └── main.go
├── go.mod
└── pkg
    └── pkg.go
# main.goが格納されたフォルダに移動して下記コマンドを実行
go build -x -o application

==========
WORK=/tmp/go-build1738008952
mkdir -p $WORK/b001/
cat >$WORK/b001/importcfg << 'EOF' # internal
# import config
packagefile sample/app/lib=/home/vscode/.cache/go-build/a7/a724a0fe8ad041405970f7b58564b919ffacd21a2b43fe2724b98711f6892119-d
packagefile sample/pkg=/home/vscode/.cache/go-build/b6/b6f1395f597fbf1daa58aaa100a00a14bb131232edccfe80704daccb231c7b4e-d
packagefile runtime=/usr/local/go/pkg/linux_amd64/runtime.a
EOF
cd /workspaces/0030/app
/usr/local/go/pkg/tool/linux_amd64/compile -o $WORK/b001/_pkg_.a -trimpath "$WORK/b001=>" -p main -lang=go1.19 -complete -buildid oSyry4d3BGPpbKni0Rks/oSyry4d3BGPpbKni0Rks -goversion go1.19.2 -c=4 -nolocalimports -importcfg $WORK/b001/importcfg -pack ./main.go
/usr/local/go/pkg/tool/linux_amd64/buildid -w $WORK/b001/_pkg_.a # internal
cp $WORK/b001/_pkg_.a /home/vscode/.cache/go-build/5b/5bea0e27c3a96bcbb504af21e9c65a3bf69d5bd36b0d2691d7566ac06bb898bf-d # internal
cat >$WORK/b001/importcfg.link << 'EOF' # internal
packagefile sample/app=$WORK/b001/_pkg_.a
・
・
・
packagefile path=/usr/local/go/pkg/linux_amd64/path.a
modinfo "0w\xaf\f\x92t\b\x02A\xe1\xc1\a\xe6\xd6\x18\xe6path\tsample/app\nmod\tsample\t(devel)\t\nbuild\t-compiler=gc\nbuild\tCGO_ENABLED=1\nbuild\tCGO_CFLAGS=\nbuild\tCGO_CPPFLAGS=\nbuild\tCGO_CXXFLAGS=\nbuild\tCGO_LDFLAGS=\nbuild\tGOARCH=amd64\nbuild\tGOOS=linux\nbuild\tGOAMD64=v1\n\xf92C1\x86\x18 r\x00\x82B\x10A\x16\xd8\xf2"
EOF
mkdir -p $WORK/b001/exe/
cd .
/usr/local/go/pkg/tool/linux_amd64/link -o $WORK/b001/exe/a.out -importcfg $WORK/b001/importcfg.link -buildmode=exe -buildid=zvtheyAVcntD4up8eqKW/oSyry4d3BGPpbKni0Rks/DerATVoCSXAUwSsXxrj7/zvtheyAVcntD4up8eqKW -extld=gcc $WORK/b001/_pkg_.a
/usr/local/go/pkg/tool/linux_amd64/buildid -w $WORK/b001/exe/a.out # internal
cp $WORK/b001/exe/a.out application
rm -r $WORK/b001/
# maion.goと同階層にビルドファイル(application)が作成される

.
├── app
│   ├── application
│   ├── lib
│   │   └── lib.go
│   └── main.go
├── go.mod
└── pkg
    └── pkg.go
# ビルドしたファイルを実行
./application

==========
Call Library
Call Pkg