SuperAPI AI 工具集

urfave-cli

编程与开发

查看项目

更新于 10-15 17:29

技能介绍

用途:urfave/cli 是 Go 的声明式 CLI 框架,用于构建带命令、子命令、类型化标志与帮助输出的命令行应用,除标准库外无外部依赖。

主要能力:以递归的 cli.Command 树组织命令与子命令(可任意嵌套),支持别名、分类分组、拼写建议;标志覆盖 String、Bool、Int 及各类宽度、Uint、Float、Duration、Timestamp 与对应的 Slice 类型,支持别名、必填、默认值、DefaultText、Destination 直接绑定、Validator 解析期校验、per-flag Action、Bool 计数(-vvv)与互斥标志组;通过 Sources 绑定环境变量或文件,并可用 cli-altsrc/v3 读取 YAML/JSON/TOML 结构化配置;v3 新增 Arguments 类型化位置参数(StringArg/Args、IntArg/Args、FloatArg/Args、TimestampArg/Args)。

使用方式:安装 go get github.com/urfave/cli/v3@latest,导入 github.com/urfave/cli/v3;构造 *cli.Command 后调用 cmd.Run(context.Background(), os.Args),出错时自行退出非零。Action 签名为 func(context.Context, *cli.Command) error;用 cmd.String("name") 等读取标志,cmd.Args() 读取非类型化位置参数。Before 适合日志、配置、鉴权、连接等准备,After 无论 Action 是否出错都执行,可用于清理;另有 CommandNotFound、OnUsageError 钩子。退出码用 cli.Exit(msg, code) 或实现 ExitCoder 的自定义错误控制。

适用场景与限制:适合需要零外部依赖、结构清晰的 Go CLI 项目,较大应用可按子命令拆分为独立文件与构造函数,并在构建时用 -ldflags 注入版本号。注意不要在同一模块混用 v2 与 v3 API;v3 已用 Sources 取代 v2 的 EnvVars,Action 签名也已变更。启用 UseShortOptionHandling 后不能使用 -option 形式的长标志。资料未说明 shell 补全与国际化等更多细节,暂未提供。