使用批处理文件在Windows下打包Golang项目

在真实项目打包过程中,存在如下需求

  1. 清理现场
  2. 构建时间戳
  3. 编译即go build命令,但是需要一些编译参数,输出可执行文件带时间戳
  4. 压缩

下文给出了批处理脚本和最佳实践,鼓励选用。

使用方法

  1. 修改main.go定义全局变量_VERSION_并在main方法中日志输出版本号

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package main

    import ( "log" )

    // 如下变量供编译器使用,不适用于golint的修改建议 var _VERSION_ = "unknown"

    func main() {

    log.Printf("current program version: %s", _VERSION_)
    }
  2. 建议在项目目录下创建 gbuildwin.bat 批处理脚本

  3. 复制如下内容到 gbuildwin.bat 批处理脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    echo off
    echo 编译打包命令如下,产生文件名带时间戳
    echo ==========================================
    set /a t1=(1%time:~0,2%-100)*1
    if %t1% LSS 10 set t1=0%t1%
    set ymd_hm=%date:~0,4%%date:~5,2%%date:~8,2%%t1%%time:~3,2%%time:~6,2%
    set Version=v2.4.%ymd_hm%"
    echo 如果需要请修改GOPATH
    @REM set GOPATH=M:\working\goYOURPROGRAM
    echo 版本号: %Version%
    @echo on
    go clean
    go generate
    go build -o YOURPROGRAM.exe -ldflags "-s -w -X main._VERSION_=%Version%" main.go
    set PATH=%PATH%;C:\Program Files\WinRAR;
    copy YOURPROGRAM.exe "YOURPROGRAM_v%ymd_hm%.exe"
    rar a "YOURPROGRAM_v%ymd_hm%.ra_" "YOURPROGRAM_v%ymd_hm%.exe"
    @echo off
    echo ==========================================
    @echo on

批处理文件在Windows XPWindows 2008下测试通过。

上述批处理脚本输出如下可执行文件 YOURPROGRAM_v20190103113702.exe

注意事项

  1. 使用上述批处理脚本时请将YOURPROGRAM替换成您的项目名称
  2. 根据修改设置 GOPATH