问题原因
当 golang
程序 panic
,或者通过 runtime.Caller(0)
获取当前出错的文件位置作为日志记录时,会暴露程序编译机器上的项目路径、以及账户,不如下面这些信息, 这些信息我们并不想让对方看到。
1 | panic: oh! no! |
问题现象
当我们通过 strings panic_demo | grep /Users
静态分析golang
编译后的二进制就可以得到完整的源码路径信息:
1 | /Users/jerry/go/src/demo/panic_demo/main.go |
这些信息我们可能并不想让对方知道, 所以我们需要对这些信息进行处理, 剔除这些信息。
解决方式
在编译是通过传入以下参数来剔除:
1 | go build -gcflags=-trimpath=${GOPATH}-asmflags=-trimpath=${GOPATH} |
更彻底的方式:
1 | go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -ldflags "-w -s" |
处理完后显示是这个样子,不带 ${GOPATH}
信息也不影响正常的堆栈信息。
1 | panic: oh! no! |