Je déplace ma commande COBRA suivi est mon code: p> Je tape la commande suivante p> la valeur de l'indicateur de drapeaux code> à 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 code>.
- Ignorer-Dernier code> devrait être
vrai code> mais je reçois
false code> comme valeur dans
rune code> args. Est-ce que je manque quelque chose ici? P>
getcommandflags code> est quelque chose que je veux l'utiliser dans d'autres commandes, je ne veux pas répéter les mêmes drapeaux. P> P>
3 Réponses :
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 {
...
}
Désolé je l'ai déjà essayé et ça ne fonctionne pas, je reçois le args code> 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 code>. Les arguments ne sont pas des indicateurs, vous les utilisez pour des choses comme
Liste de liste de données 10 code>, où
list code> est une commande et
10 code> est un argument à ce sujet. commander. Vous devez déclarer que la commande attend 1 argument et, après cela, votre
args code> 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 code> ici :(
Je ne comprends pas cette déclaration. Dans votre exemple, - Ignore-Dernier code> est un drapeau, pas un argument à une commande.
Vous avez un paramètre de valeur qui passe pas un paramètre de pointeur.
Essayez quelque chose comme: p>
Alors, juste édité d'un gros code pour une vue plus simple et la manquait. Mettre à jour le code à nouveau. @Chauffer
Vous devez utiliser Vous pouvez imprimer fonctionne bien pour moi. J'espère que cela fonctionnera aussi pour vous. P> FUNC GETCOMMANDFLAGS (CMD * COBRA.COMMAND, OPTS * LISTOPTIONS) CODE> et appelez le FUNC comme
cmd = getcommandflags (cmd et opts) code>.
opts.ignorelatst code> et
opts.ignoreold code> pour voir la valeur modifiée. 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
}
Ouais!!!! Je les ai essayés avant * listOptions code>
& opts code> mais j'ai essayé d'imprimer le
args code> trop mauvais de moi ... ça marche parfaitement ... merci pour ta aide @masudur
FUNC
GET COMMANDFLAGS code> 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 ..