golang build 的一些参数

ldflags

  • -w 为去掉调试信息(无法使用gdb调试)

  • -s 为去掉符号表(暂未清楚具体作用)

    1
    go build -ldflags "-w -s" ./hello.go

编译的时候注入版本信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"
"os"
"runtime"
)

var buildstamp = ""
var githash = ""

func main() {
args := os.Args
if len(args) == 2 && (args[1] == "--version" || args[1] == "-v") {
fmt.Printf("Git Commit Hash: %s\n", githash)
fmt.Printf("UTC Build Time : %s\n", buildstamp)
return
}
}
  • 然后编译的时候,通过链接选项 -X 来动态传入版本信息:
    1
    2
    flags="-X main.buildstamp=`date -u '+%Y-%m-%d_%I:%M:%S%p'` -X main.githash=`git describe --long --dirty --abbrev=14`"
    go build -ldflags "$flags" -x -o build-version main.go