我正试图弄清楚go Cobra中PersistentFlags和Flags之间的区别,以及我们应该在什么时候使用它们。我读过这个,但我不明白。
使用Cobra时,您定义了一个顶级命令:
prog
此顶级命令包含子命令。例如,假设我们有三个子命令,init
、start
和stop
。
prog init [-i] # initialize, but don't start anything: -i means ignore
prog start [-f] [-q] # after init, start: -f=fast, -q=quiet
prog stop [-f] # stop: -f=force
-i
标志仅用于init
,因此我们将-i
标志添加到init
子命令中。
-q
标志仅用于start
,因此我们将-q
标志添加到start
子命令中,依此类推
现在,我们想为每个命令添加一个调试模式。我们可以进入每个命令并添加一个--debug
标志。。。但是我们也可以为root命令设置一个persistent标志。现在,每个子命令中都可以使用此持久标志。
如果您有一个包含子子命令的子命令,您可以在子命令中设置一个持久标志,使该标志出现在每个子命令中,依此类推
Flags返回应用于此命令的完整FlagSet(在此处和由所有父级声明的本地和持久性(。
PersistentFlags返回在当前命令中专门设置的持久FlagSet。