go-Cobra PersistentFlags 和 Flags 有什么区别?

ser*_*io4 6 go go-cobra

我试图弄清楚 go-Cobra 中 PersistentFlags 和 Flags 之间的区别是什么,我们应该什么时候使用它们。我读过这个,但我不明白。

tor*_*rek 14

使用 Cobra 时,您定义了一个顶级命令:

prog
Run Code Online (Sandbox Code Playgroud)

这个顶级命令有子命令。例如,假设我们有三个子命令initstart、 和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
Run Code Online (Sandbox Code Playgroud)

-i标志仅用于init,因此我们-iinit子命令中添加了一个标志。

-q标志仅用于start,因此我们-qstart子命令添加一个标志,依此类推。

现在我们想为每个命令添加调试模式。我们可以进入每个命令并添加一个--debug标志……但我们也可以为 root 命令设置一个持久标志。这个持久标志现在将在每个子命令中可用。

如果您有一个包含子命令的子命令,您可以在子命令中设置一个持久标志,使该标志出现在每个子子命令中,依此类推。