Go 编译时去除 bin 文件中的编译路径 GOPATH 信息

问题原因

golang 程序 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 静态分析golang 编译后的二进制就可以得到完整的源码路径信息:

/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"

处理完后显示是这个样子,不带 ${GOPATH}信息也不影响正常的堆栈信息。

panic: oh! no!
goroutine 1 [running]:
main.main()
        src/demo/myssl_demo/getcert_demo.go:10 +0x64
发布了76 篇原创文章 · 获赞 27 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/kunyus/article/details/93467916