剔除Go编译文件的GOPATH信息

https://www.yryz.net/post/trim-gopath-when-panic-or-showstack.html

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

  1. panic: oh! no!
  2. goroutine 1 [running]:
  3. main.main()
  4. /Users/jerry/go/src/demo/panic_demo/main.go:10 +0x64

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

  1. /Users/jerry/go/src/demo/panic_demo/main.go
  2. /Users/jerry/go/src/demo/panic_demo/main.go
  3. /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. panic: oh! no!
  2. goroutine 1 [running]:
  3. main.main()
  4. src/demo/myssl_demo/getcert_demo.go:10 +0x64
ft_authoradmin  ft_create_time2017-10-14 17:17
 ft_update_time2017-10-29 14:42