2017-10-10 3 views
1

J'écris un programme CLI dans GO et j'ai besoin de pouvoir passer une assez longue liste d'arguments à la fonction principale. À l'heure actuelle, j'utilise la méthode standard pour passer des arguments (valeurs séparées par des espaces), puis les récupérer en utilisant os.Args [index].Meilleur moyen de passer de longs arguments dans un programme GoLang CLI et ses limites

Mes questions sont les suivantes:

  1. Y at-il une limite au nombre d'arguments, on peut passer?
  2. Y a-t-il une limite à la longueur d'un argument de chaîne?
  3. Existe-t-il un autre moyen d'y parvenir et, si oui, comment?
+2

Les limites dépendent toutes du système d'exploitation. Vous pouvez passer des arguments de n'importe quelle autre façon, via des fichiers, sérialisés sur stdin, des variables d'environnement, etc. – JimB

+0

Avez-vous envisagé d'utiliser un paquet pour gérer vos arguments de ligne de commande? Un paquet comme [urfave/cli] (https://github.com/urfave/cli) pourrait être utile. – doykle

+0

En ce qui concerne le point 3 de votre question, une autre façon d'y parvenir - je suggère d'utiliser un fichier de configuration (quelque chose de simple comme yaml) devrait faire. De cette façon, vous passez juste un argument de ligne de commande, chemin d'accès au fichier de configuration. –

Répondre

3
  1. Non, en ce qui concerne va. Les arguments de ligne de commande sont analysés dans un []string, donc à ce niveau, c'est juste une question de quantité de mémoire disponible. Mais, les commentaires ci-dessous sont corrects. Votre système aura ses propres limites inférieures que vous frapperez en premier.
  2. Identique à ci-dessus.
  3. Si vous vous trouvez en passant tonnes pour args pour chaque course:
    • si elles ne changent pas beaucoup, font-ils sens comme valeurs par défaut sain d'esprit pour vos drapeaux?
    • Si cela n'a pas de sens par défaut, envisagez de passer à les lire à partir d'un fichier de configuration. CSV, YAML, peu importe.

Sans savoir plus, je vous recommande un fichier de configuration. Ils facilitent le suivi de différentes configurations/exécutions, plus faciles à éditer qu'une longue liste d'arguments de ligne cmd, et vous pouvez toujours l'écrire pour que les arguments sur la ligne cmd remplacent les valeurs dans la configuration.

Consultez awesome-go pour les bibliothèques qui le font déjà, en particulier sous les sections command-line et configuration.

+1

1 & 2 ne sont pas nécessairement vrais - ils dépendent de la plate-forme et du shell. Le reste est sur place cependant. – Adrian

+0

Il doit toujours y avoir une limite à la taille des arguments. ARG_MAX le définit sur les systèmes POSIX, le mien se trouve être '262144' en ce moment. – JimB

+0

Oui, merci Adrian et JimB. J'ai ajouté vos clarifications à ma réponse. – theeddieh