左浩 發表於 2025-11-14 10:38:45

go build 移除路径信息的实现步骤

<p>用了一段时间的Golang之后,一直有个困惑,为什么报错的时候提示是这样的。</p>
<div class="jb51code"><pre class="brush:plain;">panic: 文件不存在

goroutine 1 :
main.findFile(...)
/Users/Aries/Desktop/projec/main.go:4
main.main()
/Users/Aries/Desktop/projec/main.go:8 +0x3a
exit status 2
</pre></div>
<p>作为一名开发人员,总感觉不是那么安全和严谨。报错信息里包含了你编译时候项目的所在路径,总感觉曝光了自己一样。</p>
<p>于是搜索网上怎么去除路径,找到了一个解决方法。 修改后的编译脚本如下:</p>
<div class="jb51code"><pre class="brush:go;">CGO_ENABLED=0 go build -v -a -ldflags '-s -w' \
           -gcflags=-trimpath=$(PWD) \
           -asmflags=-trimpath=$(PWD) \
           -o ./main main.go
</pre></div>
<div class="jb51code"><pre class="brush:plain;">panic: 文件不存在

goroutine 1 :
main.findFile(...)
       main.go:4
main.main()
       main.go:8 +0x3a
</pre></div>
<p>你会想应该去掉了路径吧。我也是这样想的。可一会之后又报错了,再次报错的信息如下:</p>
<div class="jb51code"><pre class="brush:plain;">panic: No Such File
goroutine 1 :
github.com/clllab/mov/utils.FindEnv(...)
/Users/Darcy/Desktop/projec/utils/utils.go:7
main.main()
main.go:14 +0x4e
</pre></div>
<p>发现了吧,虽然main package里面没有了报错信息,可其他的package的panic 同样还是有包含路径信息。于是继续搜索。</p>
<p>然后找到了这篇文章: <a href="https://stackoverflow.com/questions/45279385/remove-file-paths-from-text-directives-in-go-binaries" rel="external nofollow"   target="_blank">stackoverflow</a></p>
<p>编译脚本改成了这样:</p>
<div class="jb51code"><pre class="brush:plain;">CGO_ENABLED=0 go build -v -a -ldflags '-s -w' \
           -gcflags="all=-trimpath=${PWD}" \
           -asmflags="all=-trimpath=${PWD}" \
           -o ./main main.go
</pre></div>
頁: [1]
查看完整版本: go build 移除路径信息的实现步骤