Go 1.16+ 默认启用 Modules,需执行 go env -w GO111MODULE=on 和 GOPROXY;模块初始化用 go mod init,项目结构推荐 cmd/ 和 internal/ 分离;单命令用 flag,多子命令用 cobra;本地安装用 go install 并确保 $GOBIN 在 $PATH。
Go 1.16+ 默认启用 GO111MODULE=on,但旧项目或全局环境可能仍处于 auto 或 off 状态。运行 go version 确认版本 ≥ 1.16;若低于该版本,建议升级。接着执行:
go env -w GO111MODULE=on(永久启用模块支持)go env -w GOPROXY=https://proxy.golang.org,direct(国内可换为 https://goproxy.cn)$GOPATH/src 下初始化 CLI 项目——Modules 模式下路径无关,任意目录均可CLI 工具不需要 Web 服务或复杂框架,干净的模块初始化即可。进入目标目录后执行:
go mod init example.com/mycli(模块名建议用实际域名或 GitHub 路径)main.go,内容至少包含 func main() 和基础 flag 或 cobra.Command 初始化main()——把核心逻辑拆到 cmd/ 和 internal/ 子包,例如:cmd/root.go 放 CLI 根命令,internal/cmd/print.go 放具体子命令实现flag 是标准库,轻量够用;cobra 是生态事实标准,适合中大型 CLI(带子命令、自动 help、bash 补全)。选哪个取决于需求复杂度:
flag.String、flag.Bool 即可mycli serve、mycli export --format json 这类结构 → 上 cobra,用 cobra-cli 快速生成骨架:cobra-cli init(需先 go install github.com/spf13/cobra-cli@latest)cobra v1.7+ 要求 Go ≥ 1.18,且默认开启 UseEmittingHelp,若遇到 help 输出异常,检查是否误设了 comma
nd.SetHelpTemplate
开发阶段频繁测试,不希望每次敲 go run main.go。用 go install 把二进制装进 $GOBIN(默认是 $GOPATH/bin):
$GOBIN 在 $PATH 中(Shell 配置里加 export PATH=$GOBIN:$PATH)go install(会读取 go.mod 的 module 名 + main 包路径)no Go files in ...,说明当前目录没 main.go 或不在模块根目录;如果提示 cannot find module providing package,检查 go.mod 是否正确声明了 module,且 main.go 是否在 package main
跨平台构建时别忘了 GOOS 和 GOARCH,比如 GOOS=windows GOARCH=amd64 go build -o mycli.exe。但本地开发调试,直接 go install 最省事。