Cobra框架无法接收开头带短横线的位置参数如何解决?
Cobra接收开头带短横线位置参数的解决方案
- 方案一:无需修改代码,调用时添加双破折号分隔符
所有POSIX标准的命令行工具都支持用--作为分隔符,分隔符之后的所有输入内容都会被识别为位置参数,不会被解析为标志位。你只需要修改执行命令为:
go run myapp exampleCmd set -- "-Dexample"
即可正常将-Dexample作为第一个位置参数传入业务逻辑,适合临时使用、不想调整代码的场景。
- 方案二:修改代码关闭当前命令的标志位解析
如果你希望用户无需额外输入--也能直接传入带短横线的参数,可以在对应的setCmd结构体中添加DisableFlagParsing: true配置,关闭该命令的标志位解析能力,所有输入都会直接作为位置参数传入。如果需要保留-h/--help帮助功能,可以在业务逻辑开头自行判断处理,修改后的代码示例如下:
var setCmd = &cobra.Command{ Use: "set", Short: "set parameter", Long: `set parameter`, DisableFlagParsing: true, // 关闭标志位解析,所有输入都视为位置参数 RunE: func(cmd *cobra.Command, args []string) error { // 自行处理帮助逻辑 if len(args) > 0 && (args[0] == "-h" || args[0] == "--help") { return cmd.Help() } if len(args) != 1 && len(args) != 0 { color.Red("Wrong usage, insert just a parameter") } else if len(args) == 0 { color.Yellow("Setting default parameter: " + defaultArgument) internal.SetParams(defaultArgument) } else { internal.SetParams(args[0]) } return nil }, }
该方案适合面向普通终端用户的正式产品,可优化使用体验。
内容的提问来源于stack exchange,提问作者Fulvio
相关产品推荐
相关产品推荐

