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" を追加して実行ファイルのサイズを小さくした

以上です