剔除Go编译文件的GOPATH信息

当你panic,或者通过 runtime.Caller(0) 获取当前出错的文件位置作为日志记录时,会暴露你当时编译的项目路径、账户,下面这样可能并不是你想看到的。

1
2
3
4
5
panic: oh! no!

goroutine 1 [running]:
main.main()
/Users/jerry/go/src/demo/panic_demo/main.go:10 +0x64

我们通过静态分析编译后的二进制 strings panic_demo | grep /Users 得到:

1
2
3
/Users/jerry/go/src/demo/panic_demo/main.go
/Users/jerry/go/src/demo/panic_demo/main.go
/Users/jerry/go/src/demo/panic_demo

经过我们处理后可以剔除此信息。

解决方式

1
go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH

更彻底的方式

1
go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -ldflags "-w -s"

最终干净了,也不影响正常的堆栈信息。

1
2
3
4
5
panic: oh! no!

goroutine 1 [running]:
main.main()
src/demo/myssl_demo/getcert_demo.go:10 +0x64