go语言软件教程 go语言编程软件( 二 )


【go语言软件教程 go语言编程软件】 有两种不同的方法来分配标志 。
标志可以是“持久”的,这意味着该标志将可用于分配给它的命令以及该命令下的每个命令 。对于全局标志,在根上指定一个标志作为持久标志 。
也可以在本地分配一个标志 , 该标志只应用于该特定命令 。
默认情况下,Cobra只解析目标命令上的本地标志 , 而忽略父命令上的任何本地标志 。通过启用Command.TraverseChildren , Cobra将在执行目标命令之前解析每个命令上的本地标志 。
使用viper绑定标志
在本例中,持久标志author与viper绑定 。注意:当用户未提供--author标志时 , 变量author将不会设置为config中的值 。
更多关于 viper的文档
Flags默认是可选的,如果希望命令在未设置标志时报告错误,请根据需要进行标记:
持久性Flags
可以使用命令的Args字段指定位置参数的验证 。
内置了以下验证器:
在下面的示例中 , 我们定义了三个命令 。两个是顶级命令 , 一个(cmdTimes)是顶级命令之一的子命令 。在这种情况下,根是不可执行的,这意味着需要一个子命令 。这是通过不为“rootCmd”提供“Run”来实现的 。
我们只为一个命令定义了一个标志 。
有关标志的更多文档 , 请访问
对于一个更完整的例子更大的应用程序,请检查 Hugo。
当您有子命令时,Cobra会自动将help命令添加到应用程序中 。当用户运行“应用程序帮助”时,将调用此函数 。此外,help还支持所有其他命令作为输入 。例如 , 您有一个名为“create”的命令,没有任何附加配置;调用“app help create”时,Cobra将起作用 。每个命令都会自动添加“-help”标志 。
以下输出由Cobra自动生成 。除了命令和标志定义之外,不需要任何东西 。
帮助就像其他命令一样 。它周围没有特殊的逻辑或行为 。事实上,你可以提供你想提供的 。
您可以为默认命令提供自己的帮助命令或模板,以用于以下功能:
当用户提供无效的标志或无效的命令时,Cobra通过向用户显示“用法”来响应 。
你可以从上面的帮助中认识到这一点 。这是因为默认帮助将用法作为其输出的一部分嵌入 。
您可以提供自己的使用函数或模板供Cobra使用 。与帮助一样,函数和模板也可以通过公共方法重写:
如果在root命令上设置了version字段,Cobra会添加一个顶级的'--version'标志 。运行带有“-version”标志的应用程序将使用版本模板将版本打印到标准输出 。可以使用cmd.SetVersionTemplate(s string)函数自定义模板 。
可以在命令的主运行函数之前或之后运行函数 。PersistentPreRun和PreRun函数将在运行之前执行 。PersistentPostRun和PostRun将在运行后执行 。如果子函数不声明自己的函数 , 则它们将继承Persistent*Run函数 。这些函数按以下顺序运行:
输出:
当发生“未知命令”错误时,Cobra将打印自动建议 。这使得Cobra在发生拼写错误时的行为类似于git命令 。例如:
基于注册的每个子命令和Levenshtein距离的实现 , 建议是自动的 。匹配最小距离2(忽略大小写)的每个已注册命令都将显示为建议 。
如果需要在命令中禁用建议或调整字符串距离,请使用:
or
您还可以使用SuggestFor属性显式设置将为其建议给定命令的名称 。这允许对在字符串距离方面不接近的字符串提供建议,但在您的一组命令中是有意义的,并且对于某些您不需要别名的字符串 。例子:

推荐阅读