Добавить подкоманду в go кобра с несколькими родителями - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу иметь возможность следующих вызовов cmd в инструменте cli, который я строю в go, используя cobra:

$ mytool envs apps compare
$ mytool envs vars compare

Поэтому я создаю команды и выполняю привязки следующим образом :

    rootCmd.AddCommand(envsCmd)
    envsCmd.AddCommand(appsCmd)
    envsCmd.AddCommand(varsCmd)
    varsCmd.AddCommand(compareCmd)
    appsCmd.AddCommand(compareCmd)

Однако, когда проверяется родительский элемент подкоманды compare, она всегда оказывается apps

var compareCmd = &cobra.Command{
    Hidden: false,
    Use:    "compare",
    Short:  "",
    Long: ``,
    RunE: func(cmd *cobra.Command, args []string) error {
        fmt.Println(cmd.Parent().Use)

Выше всегда печатается apps независимо от того, если я вызову

$ mytool envs apps compare

или

$ mytool envs vars compare

Должен ли я предположить, что то, чего я хочу достичь, невозможно, по крайней мере, с использованием cobra?

1 Ответ

1 голос
/ 26 февраля 2020

Команды связаны с помощью указателей, поэтому последняя добавленная вами команда становится родительской. Вместо этого попробуйте две копии одной и той же команды:

var baseCompareCmd = cobra.Command{...}
var varCompareCmd = baseCompareCmd
var appsCompareCmd = baseCompareCmd

varsCmd.AddCommand(&varCompareCmd)
appsCmd.AddCommand(&appsCompareCmd)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...