Maison > développement back-end > Golang > Comment implémenter des jeux d'indicateurs indépendants pour les sous-commandes dans Go ?

Comment implémenter des jeux d'indicateurs indépendants pour les sous-commandes dans Go ?

Susan Sarandon
Libérer: 2025-01-01 00:08:10
original
739 Les gens l'ont consulté

How to Implement Independent Flag Sets for Subcommands in Go?

Ensembles de drapeaux indépendants dans GoLang

La documentation Go du package flag indique qu'elle permet la définition d'ensembles de drapeaux indépendants, adaptés pour implémenter des sous-commandes dans une interface de ligne de commande. Cependant, la question se pose de savoir comment réaliser cette fonctionnalité.

Dans un scénario où deux objets FlagSet sont définis, l'analyse de l'un peut entraîner des erreurs et des avertissements si la ligne de commande contient des indicateurs destinés à l'autre. L'exemple suivant illustre ce problème :

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

Ce code produit des avertissements lors de la tentative d'exécution de cmd -apply ou cmd -reset. L'objectif est de conserver des objets FlagSet séparés, en garantissant que -silent ne fonctionne que pour -apply.

La solution réside dans la distinction des sous-commandes, puis dans l'appel de Parse sur le FlagSet approprié. Le code révisé :

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

Avec cette approche, seul le FlagSet pertinent sera analysé en fonction de la sous-commande spécifiée, garantissant le comportement souhaité.

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