Go 1.16+ 默认启用 Modules,需执行 go env -w GO111MODULE=on 和 GOPROXY;模块初始化用 go mod init,项目结构推荐 cmd/ 和 internal/ 分离;单命令用 flag,多子命令用 cobra;本地安装用 go install 并确保 $GOBIN 在 $PATH。

确认 Go 版本并启用 Go Modules
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 项目结构与主入口
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 vs cobra
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) - 注意
cobrav1.7+ 要求 Go ≥ 1.18,且默认开启UseEmittingHelp,若遇到 help 输出异常,检查是否误设了command.SetHelpTemplate
构建与本地安装:让命令像系统命令一样运行
开发阶段频繁测试,不希望每次敲 go run main.go。用 go install 把二进制装进 $GOBIN(默认是 $GOPATH/bin):
立即学习“go语言免费学习笔记(深入)”;
- 确保
$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 最省事。










