Eu sou novo na programação Go e me pergunto: qual é a maneira preferida de lidar com parâmetros de configuração para um programa Go (o tipo de coisa que se pode usar arquivos de propriedades ou arquivos ini para, em outros contextos)?
go
configuration-files
theglauber
fonte
fonte
Respostas:
O formato JSON funcionou muito bem para mim. A biblioteca padrão oferece métodos para escrever a estrutura de dados recuada, portanto é bastante legível.
Veja também este fio de nozes golang .
Os benefícios do JSON são que é bastante simples analisar e legível / editável por humanos, oferecendo semântica para listas e mapeamentos (que podem se tornar bastante úteis), o que não é o caso de muitos analisadores de configuração do tipo ini.
Exemplo de uso:
conf.json :
Programa para ler a configuração
fonte
defer file.Close()
depois de verificar o erro em abertoOutra opção é usar o TOML , que é um formato semelhante ao INI criado por Tom Preston-Werner. Eu construído um analisador Vá para ele que é extensivamente testado . Você pode usá-lo como outras opções propostas aqui. Por exemplo, se você tiver esses dados TOML em
something.toml
Em seguida, você pode carregá-lo no seu programa Go com algo como
fonte
O Viper é um sistema de gerenciamento de configuração golang que funciona com JSON, YAML e TOML. Parece bem interessante.
fonte
Eu costumo usar JSON para estruturas de dados mais complicadas. A desvantagem é que você acaba facilmente com um monte de código para informar ao usuário onde estava o erro, vários casos extremos e quais não.
Para a configuração básica (chaves api, números de portas, ...), tive muita sorte com o pacote gcfg . É baseado no formato de configuração do git.
A partir da documentação:
Exemplo de configuração:
Vá struct:
E o código necessário para lê-lo:
Ele também suporta valores de fatia, para que você possa especificar uma chave várias vezes e outros recursos interessantes como esse.
fonte
Basta usar sinalizadores padrão com iniflags .
Os sinalizadores padrão go têm os seguintes benefícios:
O único problema de sinalização padrão dos sinalizadores - são os problemas de gerenciamento quando o número de sinalizadores usados no seu aplicativo se torna muito grande.
O Iniflags resolve elegantemente esse problema: apenas modifique duas linhas no seu pacote principal e magicamente ganha suporte para a leitura de valores de flag do arquivo ini. Os sinalizadores dos arquivos ini podem ser substituídos passando novos valores na linha de comando.
Consulte também https://groups.google.com/forum/#!topic/golang-nuts/TByzyPgoAQE para obter detalhes.
fonte
go test
não me deixa passar sinalizadores) enquanto um arquivo de configuração não.*FlagName = value
Comecei a usar o Gcfg, que usa arquivos semelhantes ao Ini. É simples - se você quiser algo simples, é uma boa escolha.
Aqui está o código de carregamento que estou usando atualmente, que possui configurações padrão e permite sinalizadores de linha de comando (não mostrados) que substituem algumas das minhas configurações:
fonte
dê uma olhada no gonfig
fonte
https://github.com/spf13/viper e https://github.com/zpatrick/go-config são boas bibliotecas para arquivos de configuração.
fonte
Use toml como este artigo Lendo arquivos de configuração do jeito que está
fonte
Eu escrevi uma biblioteca simples de configuração ini em Golang.
https://github.com/c4pt0r/cfg
seguro para goroutine, fácil de usar
=================== Atualizar =======================
Recentemente, preciso de um analisador INI com suporte à seção e escrevo um pacote simples:
você pode analisar INI como usar o pacote "flag":
fonte
Você também pode estar interessado em go-libucl , um conjunto de ligações Go para UCL, a Linguagem de Configuração Universal. A UCL é um pouco como JSON, mas com melhor suporte para humanos: suporta comentários e construções legíveis por humanos, como multiplicadores de SI (10k, 40M, etc.) e possui um pouco menos de clichê (por exemplo, aspas em torno das teclas). Na verdade, é bem parecido com o formato do arquivo de configuração do nginx, se você já está familiarizado com isso.
fonte
Eu concordo com o nemo e escrevi uma pequena ferramenta para tornar tudo muito fácil.
bitbucket.org/gotamer/cfg é um pacote de configuração do json
Veja doc.go para um exemplo
fonte
Eu tentei JSON. Funcionou. Mas eu odeio ter que criar a estrutura dos campos e tipos exatos que posso estar definindo. Para mim isso foi uma dor. Percebi que era o método usado por todas as opções de configuração que pude encontrar. Talvez minha formação em linguagens dinâmicas me torne cego para os benefícios de tal verbosidade. Criei um novo formato de arquivo de configuração simples e uma biblioteca mais dinâmica para lê-lo.
https://github.com/chrisftw/ezconf
Sou muito novo no mundo Go, por isso pode não ser o caminho. Mas funciona, é bem rápido e super simples de usar.
Prós
Contras
fonte