標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

Go言語の実行ファイルのパッケージを作成するバッチファイル

GOOS=windows or linux、GOARCH=amd64 or 386 という組み合わせで、(フォルダー名)-(年月日)-(GOOS)-(GOARCH).zip という zip ファイルを作ります。

go-package.cmd

@echo off
setlocal
set "PROMPT=$ "
for %%I in (%CD%) do set "NAME=%%~nI"
for %%I in (windows linux) do for %%J in (amd64 386) do call :one %%I %%J
endlocal
exit /b

:one
    set GOOS=%1
    set GOARCH=%2
    set SUFFIX=
    if %GOOS% == windows set "SUFFIX=.exe"
    echo GOOS=%GOOS% GOARCH=%GOARCH%
    @echo on
    go build
    zip -9 %NAME%-%DATE:/=%-%GOOS%-%GOARCH%.zip %NAME%%SUFFIX%
    @echo off
    exit /b

これで作ったリリースがこちら

追記 (2019.11.02)

ちょっと直しました。

@echo off
setlocal
set "PROMPT=$ "
for %%I in (%CD%) do set "NAME=%%~nI"
for %%I in (windows linux) do for %%J in (386 amd64) do call :one %%I %%J
endlocal
exit /b

:one
    set GOOS=%1
    set GOARCH=%2
    set SUFFIX=
    if %GOOS% == windows set "SUFFIX=.exe"
    echo GOOS=%GOOS% GOARCH=%GOARCH%
    @echo on
    go build -ldflags "-s -w"
    zip -9 %NAME%-%DATE:/=%-%GOOS%-%GOARCH%.zip %NAME%%SUFFIX%
    @echo off
    exit /b
  • ビルドする順番が amd64 → 386 だったのを 386 → amd64 にした
    • あとに残った実行バイナリが 386 だと、WSL で Linux 版を即テストできないから
  • go のオプションに -ldflags "-s -w" を追加して実行ファイルのサイズを小さくした

以上です