0
votes

Drapeaux de commande golang cobra dans la fonction commune ne reçoivent pas de valeurs de CLI

Je déplace ma commande COBRA drapeaux à l'intérieur d'une fonction afin que je puisse l'utiliser dans d'autres commandes. Je peux capable de voir les commandes mais quand je tape le flage, il retourne toujours false .

suivi est mon code: xxx

Je tape la commande suivante xxx

la valeur de l'indicateur de - Ignorer-Dernier devrait être vrai mais je reçois false comme valeur dans rune args. Est-ce que je manque quelque chose ici?

getcommandflags est quelque chose que je veux l'utiliser dans d'autres commandes, je ne veux pas répéter les mêmes drapeaux.


4 commentaires

FUNC GET COMMANDFLAGS a deux paramètres mais vous passez trois.


Alors, juste édité d'un gros code pour une vue plus simple et la manquait. Mettre à jour le code à nouveau. @Masudurrahman


J'ai ajouté une réponse qui fonctionne pour moi. Vous pouvez vérifier cela.


Ouais. J'ai raté la chose d'importation tout en débogage .. Merci ..


3 Réponses :


2
votes

Vous passez opts code> à getCommandflags code> par valeur. Vous devez transmettre un pointeur. Les adresses enregistrées pour les drapeaux utilisent-ils le OPTS code> déclaré dans la fonction d'appel.

func GetCommandFlags(cmd *cobra.Command, opts *ListOptions) *cobra.Command {
  ...
}


4 commentaires

Désolé je l'ai déjà essayé et ça ne fonctionne pas, je reçois le args comme vide toujours.


Vous n'aurez pas d'ignorer le dernier argument. Il est enregistré comme un drapeau, de sorte que vous obtiendrez du opts.ignorelatst . Les arguments ne sont pas des indicateurs, vous les utilisez pour des choses comme Liste de liste de données 10 , où list est une commande et 10 est un argument à ce sujet. commander. Vous devez déclarer que la commande attend 1 argument et, après cela, votre args contiendra un élément de celui-ci, qui est "10".


Mais que se passe-t-il si j'ai décidé de ne pas utiliser de drapeaux qui en commandement. Je ne peux pas utiliser attend 1 argument ici :(


Je ne comprends pas cette déclaration. Dans votre exemple, - Ignore-Dernier est un drapeau, pas un argument à une commande.



0
votes

Vous avez un paramètre de valeur qui passe pas un paramètre de pointeur.

Essayez quelque chose comme: xxx


1 commentaires

Alors, juste édité d'un gros code pour une vue plus simple et la manquait. Mettre à jour le code à nouveau. @Chauffer



2
votes

Vous devez utiliser FUNC GETCOMMANDFLAGS (CMD * COBRA.COMMAND, OPTS * LISTOPTIONS) CODE> et appelez le FUNC comme cmd = getcommandflags (cmd et opts) code>.

Vous pouvez imprimer opts.ignorelatst code> et opts.ignoreold code> pour voir la valeur modifiée. p>

fonctionne bien pour moi. J'espère que cela fonctionnera aussi pour vous. P>

func NewCommand(ctx context.Context) *cobra.Command {
    var opts ListOptions

    cmd := &cobra.Command{
        Use:   "list",
        Short: "List",
        RunE: func(cmd *cobra.Command, args []string) error {
            // fmt.Println(args) // []
            fmt.Println(opts.IgnoreLatest, ", ", opts.IgnoreOld)
            opts.refs = args
            return List(ctx, gh, opts, os.Stdout)
        },
    }

    cmd = GetCommandFlags(cmd, &opts)
    return cmd
}

// GetListCommandFlags for list
func GetCommandFlags(cmd *cobra.Command, opts *ListOptions) *cobra.Command {
    flags := cmd.Flags()
    flags.BoolVar(&opts.IgnoreLatest, "ignore-latest", false, "Do not display latest")
    flags.BoolVar(&opts.IgnoreOld, "ignore-old", false, "Do not display old data")
    return cmd
}


1 commentaires

Ouais!!!! Je les ai essayés avant * listOptions & opts mais j'ai essayé d'imprimer le args trop mauvais de moi ... ça marche parfaitement ... merci pour ta aide @masudur