现在我意识到Go语言将源代码的绝对路径保存在二进制文件中,以便打印堆栈跟踪等。我不想完全删除这些信息,但是,这也意味着每个开发者在构建相同的程序时,都会生成一个具有不同校验和的可执行文件。在我尝试使用chroot或类似的方法重新实现之前:有没有办法告诉Go语言不要使用绝对路径呢?
chroot
hmmo2u0o1#
我知道它没有直接解决你的问题,但是@JimB的建议确实指出了你似乎遇到的问题的一类解决方案。其中一个更简单的方法(我认为)是让开发人员安装Docker并创建一个别名,以便运行go命令:
go
docker run --rm --tty --volume $GOPATH:/go golang:1.7.1(-$YOUR_PLATFORM) go
然后,每个构建(以及测试和运行)都认为它使用的是/go的GOPATH,开发人员的校验和不会因此而不一致。有关详细信息,请参阅here。
/go
kqqjbcuj2#
有没有办法告诉Go语言不要使用绝对路径呢?现今有:-trimpath .https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies 解释道:
-trimpath
2条答案
按热度按时间hmmo2u0o1#
我知道它没有直接解决你的问题,但是@JimB的建议确实指出了你似乎遇到的问题的一类解决方案。
其中一个更简单的方法(我认为)是让开发人员安装Docker并创建一个别名,以便运行
go
命令:然后,每个构建(以及测试和运行)都认为它使用的是
/go
的GOPATH,开发人员的校验和不会因此而不一致。有关详细信息,请参阅here。
kqqjbcuj2#
有没有办法告诉Go语言不要使用绝对路径呢?
现今有:
-trimpath
.https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies 解释道:
从生成的可执行文件中删除所有文件系统路径。记录的文件名不是绝对文件系统路径,而是以module path@version(使用模块时)或普通导入路径(使用标准库或GOPATH时)开头。