当你panic,或者通过 runtime.Caller(0) 获取当前出错的文件位置作为日志记录时,会暴露你当时编译的项目路径、账户,下面这样可能并不是你想看到的。
panic: oh! no! goroutine 1 [running]: main.main() /Users/jerry/go/src/demo/panic_demo/main.go:10 +0x64
我们通过静态分析编译后的二进制 strings panic_demo | grep /Users
得到:
/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
经过我们处理后可以剔除此信息。
解决方式
go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH
更彻底的方式
go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -ldflags "-w -s"
最终干净了,也不影响正常的堆栈信息。
panic: oh! no! goroutine 1 [running]: main.main() src/demo/myssl_demo/getcert_demo.go:10 +0x64