go build 行为异常

go build behaves strangely

我有以下项目结构

./
    lib/   shared library
    cmd/
        cli/
            main.go 
        srv/
            main.go

在 main.go 我有

package main

import "fmt"

func main() {
    fmt.Println("cli")
}

来自根文件夹 i 运行 go build ./...,希望在根文件夹中创建 clisrv 二进制文件,但没有任何反应

但是 运行ning go build ./cmd/cli 确实在根文件夹

中生成了一个 cli 二进制文件

怎么了?

Go 1.13 开始,如果您将 -o 标志显式设置为目录,go build 将输出多个可执行文件。因此,例如,mkdir -p ./bin && go build -o ./bin ./... 将构建所有匹配 ./... 的可执行文件并将它们输出到目录 ./bin.