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
Libérer: 2024-12-11 04:43:08
original
515 Les gens l'ont consulté

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)
}
Copier après la connexion

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)
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal