Maison >développement back-end >Golang >Comment définir et analyser correctement des FlagSets indépendants dans Go pour les sous-commandes ?

Comment définir et analyser correctement des FlagSets indépendants dans Go pour les sous-commandes ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-11 04:43:08479parcourir

How to Properly Define and Parse Independent FlagSets in Go for Subcommands?

Définition de FlagSets indépendants dans GoLang

La documentation Go indique que le type FlagSet permet la création d'ensembles de drapeaux indépendants, ce qui est utile pour implémenter des sous-commandes dans une commande- interface de ligne. Cependant, la mise en œuvre de cette fonctionnalité peut s'avérer difficile.

Lors de la définition de deux FlagSets, l'analyse de l'un d'eux peut entraîner des erreurs ou des avertissements si la ligne de commande contient des indicateurs destinés au deuxième FlagSet. Par exemple, considérons le code suivant :

f1 := flag.NewFlagSet("f1", flag.ContinueOnError)
apply := f1.Bool("apply", false, "")
silent := f1.Bool("silent", false, "")
if err := f1.Parse(os.Args[1:]); err == nil {
    fmt.Println(*apply, *silent)
}
f2 := flag.NewFlagSet("f2", flag.ContinueOnError)
reset := f2.Bool("reset", false, "")
if err := f2.Parse(os.Args[1:]); err == nil {
    fmt.Println(*reset)
}

L'exécution de cmd -apply ou cmd -reset génère divers avertissements. Ce comportement est dû au manque de différenciation entre les sous-commandes. Pour séparer efficacement ces FlagSets, il est nécessaire de distinguer d'abord les sous-commandes, puis d'analyser le FlagSet correct.

Un exemple de la façon d'y parvenir :

f1 := flag.NewFlagSet("f1", flag.ContinueOnError)
silent := f1.Bool("silent", false, "")
f2 := flag.NewFlagSet("f2", flag.ContinueOnError)
loud := f2.Bool("loud", false, "")

switch os.Args[1] {
  case "apply":
    if err := f1.Parse(os.Args[2:]); err == nil {
      fmt.Println("apply", *silent)
    }
  case "reset":
    if err := f2.Parse(os.Args[2:]); err == nil {
      fmt.Println("reset", *loud)
    }
}

Ce code permet au -silent drapeau à utiliser exclusivement avec la sous-commande apply et le drapeau -loud à utiliser exclusivement avec la sous-commande reset.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn