- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
Cobra 库中是否有内置工具(如果有,我该如何使用它?)来要求标志是多个值之一,并在标志不是允许值之一时抛出错误?我没有在 Github 页面上看到这个。
最佳答案
Cobra 允许您通过 pflag.(*FlagSet).Var()
定义自定义值类型以用作标志。方法(来自 Cobra 使用的 https://github.com/spf13/pflag 包)。您必须创建一个实现 pflag.Value
的新类型接口(interface):
type Value interface {
String() string
Set(string) error
Type() string
}
示例类型定义:
type myEnum string
const (
myEnumFoo myEnum = "foo"
myEnumBar myEnum = "bar"
myEnumMoo myEnum = "moo"
)
// String is used both by fmt.Print and by Cobra in help text
func (e *myEnum) String() string {
return string(*e)
}
// Set must have pointer receiver so it doesn't change the value of a copy
func (e *myEnum) Set(v string) error {
switch v {
case "foo", "bar", "moo":
*e = myEnum(v)
return nil
default:
return errors.New(`must be one of "foo", "bar", or "moo"`)
}
}
// Type is only used in help text
func (e *myEnum) Type() string {
return "myEnum"
}
注册示例:
func init() {
var flagMyEnum = myEnumFoo
var myCmd = &cobra.Command{
Use: "mycmd",
Short: "A brief description of your command",
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("myenum value:", flagMyEnum)
},
}
rootCmd.AddCommand(myCmd)
myCmd.Flags().Var(&flagMyEnum, "myenum", `my custom enum. allowed: "foo", "bar", "moo"`)
}
示例用法:(注意下面控制台输出中的第一行)
$ go run . mycmd --myenum raz
Error: invalid argument "raz" for "--myenum" flag: must be one of "foo", "bar", or "moo"
Usage:
main mycmd [flags]
Flags:
-h, --help help for mycmd
--myenum myEnum my custom enum. allowed: "foo", "bar", "moo" (default foo)
exit status 1
$ go run . mycmd --myenum bar
myenum value: bar
要为此添加自动完成功能,有点隐藏的文档页面 cobra/shell_completions.md#completions-for-flags有很大的帮助。对于我们的示例,您将添加如下内容:
func init() {
// ...
myCmd.Flags().Var(&flagMyEnum, "myenum", `my custom enum. allowed: "foo", "bar", "moo"`)
myCmd.RegisterFlagCompletionFunc("myenum", myEnumCompletion)
}
// myEnumCompletion should probably live next to the myEnum definition
func myEnumCompletion(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return []string{
"foo\thelp text for foo",
"bar\thelp text for bar",
"moo\thelp text for moo",
}, cobra.ShellCompDirectiveDefault
}
示例用法:
$ go build -o main .
$ source <(main completion bash)
$ main mycmd --myenum <TAB><TAB>
bar (help text for bar)
foo (help text for foo)
moo (help text for moo)
关于go - Cobra 允许的标志值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50824554/
Cobra 库中是否有内置工具(如果有,我该如何使用它?)来要求标志是多个值之一,并在标志不是允许值之一时抛出错误?我没有在 Github 页面上看到这个。 最佳答案 Cobra 允许您通过 pfla
我希望能够设置 Usage 行来指定如果在 Go 中的 cobra 命令上调用帮助函数,则需要传递一个参数。 这是常规帮助标志输出的内容: Cancel the order specified by
我正在使用 cobra 构建 CLI,并希望模拟使用不同的选项/标志集运行的命令。我一直在努力弄清楚如何使用 cobra API 在我的测试中设置标志,但还没有真正弄明白。 我有这个: // NewF
如果没有传递参数或标志,我希望子命令打印出帮助菜单(主命令默认执行此操作)。 例如,没有任何参数或标志的主命令: chris@pop-os:~$ ./tk Command line applicati
我有下面的代码,真的很简单。关键是第一个 fmt.Println 之后的代码永远不会执行。知道为什么吗? 该代码创建一个随机字符串,然后创建一个 Gin 路由器。执行路由器的代码永远不会运行。 fun
我是一名 Go 初学者,我正在尝试使用 Cobra 创建一个 CLI .为了引导项目,我使用了 Cobra Generator ,生成了一个命令,一个子命令,一切正常。 我现在有这种类型的布局: cl
我是一名 Go 初学者,我正在尝试使用 Cobra 创建一个 CLI .为了引导项目,我使用了 Cobra Generator ,生成了一个命令,一个子命令,一切正常。 我现在有这种类型的布局: cl
我有一个 go 项目的空目录,只有 go.mod在场(我已运行 go mod init 命令) ▶ cat go.mod module github.com/myorganization/mytool
我指的是 spf13/cobra . 我使用 go get github.com/spf13/cobra/cobra 下载了 cobra 包,并在我的程序中导入了 "github.com/spf13/
我想用 cobra 创建 golang CLI .目前,它运行良好。我创建了类似 foobar create --username johndoe 的东西。但我需要像 foobar create us
Cobra 和 Viper 中的文档让我感到困惑。我执行了 cobra init fooproject,然后在项目目录中执行了 cobra add bar。我有一个名为 foo 的 Persisten
我无法同时使用 Cobra 和 Viper。这就是我正在做的事情: var options util.Config = util.Config{} var rootCmd = &cobra.Comma
此示例 Cobra 应用程序,https://github.com/kurtpeek/myCobraApp , 包含一个使用 Cobra 生成器搭建的 Cobra 应用程序,其中包含以下命令: cob
我想在我正在构建的 cli 工具中选择以下 cmd 调用 go使用 cobra : $ mytool envs apps compare $ mytool envs vars compare 因此,我
我正在使用 cobra 构建 CLI。 我想创建一个名为 config 的新命令,它将位于文件 config.go 和文件夹 proxy 中。 这是结构: MyProject ├── cmd | ├
Cobra 和 Lobo 项目结束了吗? http://lobobrowser.org/cobra.jsphttp://lobobrowser.org/java-browser.jsp A. 最佳答案
抱歉,我找不到使用示例的方法 ./client echo --times 10 "coucou" ./client --times 10 "coucou" echo 无法使用它...抱歉我的错误。
在下面的代码中,我定义了一个命令,其中有两个选项是可能的:1. myapp 信息 --flag1 文本2.我的应用程序信息--flag2如果没有指定这两个选项,我想显示 helpCommand var
基本信息:我创建了一个 go 应用程序并使用了 Cobra。 Cobra 使用 Viper 作为命令行参数和标志。 我有一个带有标志绑定(bind)的命令监听,我想在 yaml 文件中配置它。 代码:
我正在使用 Go 开发一个 Web 应用程序。到目前为止一切顺利,但现在我将 Wercker 集成为 CI 工具并开始关心测试。但我的应用程序严重依赖 Cobra/Viper 配置/标志/环境变量方案
我是一名优秀的程序员,十分优秀!