Soy nuevo en la programación de Go y me pregunto: ¿cuál es la forma preferida de manejar los parámetros de configuración para un programa Go (el tipo de cosas para las que uno podría usar archivos de propiedades o archivos ini , en otros contextos)?
go
configuration-files
theglauber
fuente
fuente
Respuestas:
El formato JSON me funcionó bastante bien. La biblioteca estándar ofrece métodos para escribir la estructura de datos con sangría, por lo que es bastante legible.
Vea también este hilo de nueces de golang .
Los beneficios de JSON son que es bastante simple de analizar y que se puede leer / editar por humanos, al tiempo que ofrece semántica para listas y mapeos (que puede ser bastante útil), que no es el caso con muchos analizadores de configuración de tipo ini.
Ejemplo de uso:
conf.json :
Programa para leer la configuración
fuente
defer file.Close()
después de comprobar abrir errOtra opción es usar TOML , que es un formato similar a INI creado por Tom Preston-Werner. Yo construí un analizador Vaya para él que está ampliamente probado . Puede usarlo como otras opciones propuestas aquí. Por ejemplo, si tiene estos datos TOML en
something.toml
Luego puede cargarlo en su programa Go con algo como
fuente
Viper es un sistema de gestión de configuración de golang que funciona con JSON, YAML y TOML. Se ve muy interesante.
fuente
Usualmente uso JSON para estructuras de datos más complicadas. La desventaja es que fácilmente terminas con un montón de código para decirle al usuario dónde estuvo el error, varios casos extremos y qué no.
Para la configuración básica (claves API, números de puerto, ...) he tenido muy buena suerte con el gcfg paquete . Se basa en el formato de configuración de git.
De la documentación:
Configuración de muestra:
Go struct:
Y el código necesario para leerlo:
También admite valores de división, por lo que puede permitir especificar una clave varias veces y otras características agradables como esa.
fuente
Simplemente use las banderas de go estándar con iniflags .
Las banderas estándar go tienen los siguientes beneficios:
El único inconveniente que tienen las banderas de go estándar son los problemas de administración cuando la cantidad de banderas utilizadas en su aplicación es demasiado grande.
Iniflags resuelve este problema con elegancia: solo modifique dos líneas en su paquete principal y mágicamente obtendrá soporte para leer los valores del indicador desde el archivo ini. Las banderas de los archivos ini se pueden anular pasando nuevos valores en la línea de comandos.
Consulte también https://groups.google.com/forum/#!topic/golang-nuts/TByzyPgoAQE para más detalles.
fuente
go test
no me deja pasar banderas) mientras que un archivo de configuración no lo haría.*FlagName = value
He empezado a usar Gcfg que usa archivos similares a Ini. Es simple: si quieres algo simple, esta es una buena opción.
Aquí está el código de carga que estoy usando actualmente, que tiene configuraciones predeterminadas y permite marcas de línea de comando (no mostradas) que anulan algunas de mis configuraciones:
fuente
echa un vistazo a gonfig
fuente
https://github.com/spf13/viper y https://github.com/zpatrick/go-config son bibliotecas bastante buenas para archivos de configuración.
fuente
Use toml como este artículo Leyendo archivos de configuración de la manera Go
fuente
Escribí una biblioteca simple de configuración ini en golang.
https://github.com/c4pt0r/cfg
seguro para la rutina, fácil de usar
=================== Actualización =======================
Recientemente necesito un analizador INI con soporte de sección, y escribo un paquete simple:
puede analizar INI como si usara el paquete "flag":
fuente
También le puede interesar go-libucl , un conjunto de enlaces Go para UCL, el Lenguaje de configuración universal. UCL es un poco como JSON, pero con un mejor soporte para humanos: admite comentarios y construcciones legibles por humanos como multiplicadores SI (10k, 40M, etc.) y tiene un poco menos repetitivo (por ejemplo, comillas alrededor de las teclas). En realidad, está bastante cerca del formato de archivo de configuración nginx, si ya está familiarizado con eso.
fuente
Estoy de acuerdo con nemo y escribí una pequeña herramienta para que todo sea realmente fácil.
bitbucket.org/gotamer/cfg es un paquete de configuración json
Ver doc.go para un ejemplo
fuente
Intenté JSON. Funcionó. Pero odio tener que crear la estructura de los campos y tipos exactos que podría estar configurando. Para mí eso fue un dolor. Noté que era el método utilizado por todas las opciones de configuración que pude encontrar. Quizás mi experiencia en lenguajes dinámicos me deja ciego a los beneficios de tal verbosidad. Hice un nuevo formato de archivo de configuración simple y una biblioteca más dinámica para leerlo.
https://github.com/chrisftw/ezconf
Soy bastante nuevo en el mundo Go, por lo que podría no ser el camino Go. Pero funciona, es bastante rápido y súper simple de usar.
Pros
Contras
fuente