用途:指导用 Go 编写行为良好的命令行工具,使其符合 Unix 惯例——参数优先于魔法行为,stdout 输出数据,stderr 输出诊断,退出码可被脚本信任,Ctrl+C 能真正停止程序。
主要能力与要点:
- 结构:采用可测试的 main,把逻辑放进 run(ctx, args, stdin, stdout, stderr),用 signal.NotifyContext 让 Ctrl+C 取消上下文,长操作接收 ctx 并干净退出;os.Exit 只在 main 中调用。
- stdout 与 stderr:stdout 放程序输出与可管道数据,stderr 放日志、进度、警告和用法错误;--json 或检测到管道时只关闭装饰,不改变数据。
- 退出码:0 成功,1 通用运行时失败,2 用法错误(flag 包约定),大于 2 为工具自定义并有文档说明;错误到退出码的映射集中在一处,可用 errors.Is 配合哨兵错误。
- 标志与参数:选项用标志,主要操作数用位置参数;每个标志都有用法字符串,-h 输出是主要 UX;文件参数接受 - 表示 stdin/stdout;默认值必须安全,破坏性行为需显式标志(如 --force);密钥从环境变量或文件读取,不要用标志(ps 会泄露 argv)。
- 子命令:少量命令用标准库 switch 即可;需要嵌套命令、自动生成帮助/补全和大量标志时再引入 Cobra。Cobra 规则:始终用 RunE(不要 Run + os.Exit),设置 SilenceUsage: true,传递 cmd.Context()。仅当确实需要分层配置(标志 > 环境变量 > 文件)时才加 Viper,多数工具 flag + os.Getenv 足够。
- 面向人与机器的输出:--json 供机器消费,默认表格/文本供人阅读;stdout 非终端或设置 NO_COLOR 时不输出 ANSI 颜色;进度条/旋转指示器只在终端时输出到 stderr。
限制:资料未提供该技能的安装方式、平台支持、收费或价格信息,暂未提供。