Je suis nouveau dans la programmation Go, et je me demande: quelle est la meilleure façon de gérer les paramètres de configuration d'un programme Go (le genre de choses que l'on pourrait utiliser pour les fichiers de propriétés ou les fichiers ini , dans d'autres contextes)?
go
configuration-files
theglauber
la source
la source
Réponses:
Le format JSON a très bien fonctionné pour moi. La bibliothèque standard propose des méthodes pour écrire la structure de données en retrait, elle est donc assez lisible.
Voir aussi ce fil écrou golang .
Les avantages de JSON sont qu'il est assez simple à analyser et lisible / modifiable par l'homme tout en offrant une sémantique pour les listes et les mappages (qui peut devenir très pratique), ce qui n'est pas le cas avec de nombreux analyseurs de configuration de type ini.
Exemple d'utilisation:
conf.json :
Programme pour lire la configuration
la source
defer file.Close()
après avoir vérifié l'erreur ouverteUne autre option consiste à utiliser TOML , qui est un format de type INI créé par Tom Preston-Werner. J'ai construit un analyseur Go pour lui qui est largement testé . Vous pouvez l'utiliser comme les autres options proposées ici. Par exemple, si vous avez ces données TOML dans
something.toml
Ensuite, vous pouvez le charger dans votre programme Go avec quelque chose comme
la source
Viper est un système de gestion de configuration golang qui fonctionne avec JSON, YAML et TOML. Ça a l'air assez intéressant.
la source
J'utilise généralement JSON pour des structures de données plus complexes. L'inconvénient est que vous vous retrouvez facilement avec un tas de code pour dire à l'utilisateur où était l'erreur, divers cas marginaux et ce qui ne l'est pas.
Pour la configuration de base (clés api, numéros de port, ...) j'ai eu beaucoup de chance avec le paquet gcfg . Il est basé sur le format git config.
De la documentation:
Exemple de configuration:
Allez struct:
Et le code nécessaire pour le lire:
Il prend également en charge les valeurs de tranche, vous pouvez donc permettre de spécifier plusieurs fois une clé et d'autres fonctionnalités intéressantes comme celle-ci.
la source
Utilisez simplement des drapeaux go standard avec des iniflags .
Les drapeaux go standard ont les avantages suivants:
Le seul inconvénient des drapeaux go standard est: les problèmes de gestion lorsque le nombre de drapeaux utilisés dans votre application devient trop important.
Iniflags résout ce problème avec élégance: il suffit de modifier deux lignes dans votre package principal et il prend comme par magie la prise en charge de la lecture des valeurs d'indicateur à partir du fichier ini. Les indicateurs des fichiers ini peuvent être remplacés en passant de nouvelles valeurs en ligne de commande.
Voir également https://groups.google.com/forum/#!topic/golang-nuts/TByzyPgoAQE pour plus de détails.
la source
go test
ne me laisse pas passer les indicateurs), contrairement à un fichier de configuration.*FlagName = value
J'ai commencé à utiliser Gcfg qui utilise des fichiers de type Ini. C'est simple - si vous voulez quelque chose de simple, c'est un bon choix.
Voici le code de chargement que j'utilise actuellement, qui a des paramètres par défaut et permet des indicateurs de ligne de commande (non affichés) qui remplacent une partie de ma configuration:
la source
jetez un oeil à gonfig
la source
https://github.com/spf13/viper et https://github.com/zpatrick/go-config sont de très bonnes bibliothèques pour les fichiers de configuration.
la source
Utilisez toml comme cet article Lire les fichiers de configuration à la manière
la source
J'ai écrit une simple bibliothèque de configuration ini dans golang.
https://github.com/c4pt0r/cfg
sans danger pour la goroutine, facile à utiliser
=================== Mise à jour ========================
Récemment, j'ai besoin d'un analyseur INI avec support de section, et j'écris un package simple:
vous pouvez analyser INI comme utiliser le package "flag":
la source
Vous pourriez également être intéressé par go-libucl , un ensemble de liaisons Go pour UCL, Universal Configuration Language. UCL est un peu comme JSON, mais avec un meilleur support pour les humains: il prend en charge les commentaires et les constructions lisibles par l'homme comme les multiplicateurs SI (10k, 40M, etc.) et a un peu moins de passe-partout (par exemple, les guillemets autour des clés). Il est en fait assez proche du format de fichier de configuration nginx, si vous le connaissez déjà.
la source
Je suis d'accord avec nemo et j'ai écrit un petit outil pour que tout soit vraiment simple.
bitbucket.org/gotamer/cfg est un package de configuration json
Voir doc.go pour un exemple
la source
J'ai essayé JSON. Ça a marché. Mais je déteste devoir créer la structure des champs et types exacts que je pourrais définir. Pour moi, c'était une douleur. J'ai remarqué que c'était la méthode utilisée par toutes les options de configuration que je pouvais trouver. Peut-être que mon expérience dans les langues dynamiques me rend aveugle aux avantages d'une telle verbosité. J'ai fait un nouveau format de fichier de configuration simple, et une bibliothèque plus dynamique pour le lire.
https://github.com/chrisftw/ezconf
Je suis assez nouveau dans le monde du Go, donc ce n'est peut-être pas le chemin du Go. Mais cela fonctionne, il est assez rapide et super simple à utiliser.
Avantages
Les inconvénients
la source