什么是/tmp/goc-build-xxxxx目录?dlv调试时无法访问该目录如何处理?
Go构建临时目录相关问题解答
1. /tmp/goc-build-*临时目录的作用
- 存放构建全流程的中间产物:
go build执行时会生成该随机命名临时目录,用于保存预处理后的源文件、.o目标文件、链接阶段临时文件等,避免污染源代码所在目录。 - 提升编译效率:针对包含cgo代码、多依赖的项目,该目录会缓存未修改依赖的编译结果,增量编译时可直接复用,减少重复编译耗时。
- 作为构建工作目录被写入调试符号:Go工具链会将该目录的绝对路径写入二进制的调试信息中,因此使用dlv调试二进制时会看到该构建路径。
2. 无法访问该目录的原因
go build命令默认在构建完成、最终二进制文件生成后,会自动清理删除对应的goc-build-*临时目录,因此构建结束后你再访问该路径就会返回No such file or directory错误。
如果调试场景需要保留该临时目录,可以在构建时添加-work参数:
go build -work /git.company.com/service/
执行后控制台会打印临时目录的路径,且构建结束后不会自动删除该目录。
内容的提问来源于stack exchange,提问作者fu4ng
相关产品推荐
相关产品推荐

