Linux/MacOS下编译Go项目子模块的文件命名疑问
Go编译子模块时与目录重名的问题解决
在类Unix系统(Linux/macOS)下执行go build ./sub_module时,Go默认会把目标目录名作为可执行文件的输出名,又因为这类系统不需要.exe后缀,就会生成和目录同名的sub_module文件。虽然系统允许文件和目录同名,但日常操作很容易搞混——比如输入sub_module时,系统会优先执行文件而不是进入目录,所以可以通过以下方式解决这个问题:
解决方案
1. 自定义输出文件名
用-o参数指定编译后的可执行文件名,直接规避重名:
go build -o sub_module_app ./sub_module
执行后会生成sub_module_app可执行文件,和sub_module目录完全不冲突。
2. 进入子目录编译
切换到sub_module目录后再编译,生成的可执行文件会放在子目录内:
cd sub_module && go build
这种方式下,可执行文件会存在于sub_module/sub_module,不会影响根目录结构,但子目录里会同时有源码和可执行文件,适合临时测试场景。
3. 统一输出到指定目录
在项目根目录创建一个专门存放可执行文件的目录(比如bin),把编译产物都放到这里:
# 先创建bin目录(不存在的话) mkdir -p bin # 编译到bin目录 go build -o bin/sub_module ./sub_module
这种方式能让项目结构更整洁,所有编译产物集中管理,也不会出现重名问题。
内容的提问来源于stack exchange,提问作者Aluminate
相关产品推荐
相关产品推荐

