В чем разница между go-Cobra PersistentFlags и Flags?

Aug 20 2020

Я пытаюсь понять, в чем разница между PersistentFlags и Flags в go-Cobra, и когда мы должны использовать каждый из них. Я читал это, но не понял.

Ответы

3 torek Aug 20 2020 at 11:48

При использовании 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флаг ... но мы также можем просто установить постоянный флаг для корневой команды. Этот постоянный флаг теперь будет доступен в каждой подкоманде.

Если у вас есть подкоманда, которая имеет подкоманды, вы можете установить постоянный флаг в подкоманде, чтобы этот флаг появлялся в каждой подкоманде, и так далее.