Go Tools 一些实用技巧

去掉调试信息

$ go build -ldflags "-w -s"

-w 去掉调试信息 -s去掉符号表

将version信息编译进Binary

这里实用-ldflags的-X参数,语法如下:

-X importpath.name=value

使用示例:

package main

import "fmt"

var (
	Version   string
	BuildTime string
	GoVersion string
)

func main() {
	fmt.Printf("%s\n%s\n%s\n", Version, BuildTime, GoVersion)
}
$ go build -ldflags "-X main.Version=1.0.0 -X 'main.BuildTime=`date`' -X 'main.GoVersion=`go version`'"

编译成功后运行程序结果如下:

➜  gotit ./gotit 
1.0.0
Mon Aug 13 10:17:48 CST 2018
go version go1.11beta3 darwin/amd64

去掉调用栈GOPATH路径

未去掉之前:

panic: error occur

goroutine 1 [running]:
main.main()
        /Users/willsky/gopath/src/gotit/main.go:10 +0x39

使用-gcflags去掉GOPATH路径

➜  gotit go build -gcflags "all=-trimpath=$GOPATH" 

去掉之后:

panic: error occur

goroutine 1 [running]:
main.main()
        src/gotit/main.go:10 +0x39