go build ./...执行无输出 单独构建子目录可生成二进制问题咨询
根本原因
这是go build命令的默认行为导致的,核心规则如下:
- 当
go build一次性指定多个包路径时(你的./...通配符匹配到了lib、./cmd/cli、./cmd/srv三个包),命令只会校验所有包的编译合法性,不会输出任何可执行二进制文件 - 只有当
go build单次指定唯一一个属于main包的路径时,才会在当前执行目录下生成对应名称的可执行文件 - 你的
lib目录属于共享库包(非main包),本身也不会生成可执行文件,即使单独构建也只会缓存编译结果到本地构建缓存,不会输出可见的二进制文件
为什么单独构建
./cmd/cli正常 你执行go build ./cmd/cli时,单次只指定了一个main包,触发了go build输出可执行文件的逻辑,所以会在根目录生成cli二进制。
一次性生成两个可执行文件的方案
你可以用两种常用方式实现批量输出:
- 方法1:使用
go install ./...,编译后的cli、srv可执行文件会自动生成到$GOPATH/bin目录,如果你自定义了GOBIN环境变量则会输出到GOBIN指定路径 - 方法2:使用脚本循环构建所有cmd下的main包,比如bash环境下执行如下命令即可直接在根目录生成两个可执行文件:
for pkg in ./cmd/*; do [ -d "$pkg" ] && go build "$pkg"; done
内容的提问来源于stack exchange,提问作者xakepp35
相关产品推荐
相关产品推荐

