[Como usar goconfig]

goconfig

goconfig é um pacote para tornar fácil implementar as três principais formas de configuração de um sistema, ou seja, ler parâmetros da linha de comando, variáveis de ambiente e arquivos de configuração.

Veja o vídeo desse arquivo aqui.

A ideia é tornar a lentura da configuração bem simples porque a tendência a complexidade do seu sistema aumentar e não tem porque ter mais complexidade só porque você quer adicionar mais um parâmetro ou mais uma variável de ambiente.

Instalando

A instalação é bem simples, basta fazer o tradicional go get como no exemplo abaixo.

go get github.com/crgimenes/goconfig

Como usar

Crie uma estrutura qualquer com os campos que deseja para configurar o seu sistema, no momento só quatro tipos de campos são suportados, string, int, bool e sub-structs. Você também pode aninhar quantas structs quiser.

Veja o exemplo

type config struct {
	Host    string
	Port    int
}

Então crie uma instancia da sua struct, minha sugestão é criar uma instancia global e passar um ponteiro para cada parte do sistema que precisar ler as configurações, dessa forma você carrega as configurações apenas uma vez e usa no sistema todo.

var cfg config
.
.
.
cfg = config{}

Por fim passe um ponteiro da sua nova instancia para a função Parse.

err := goconfig.Parse(&cfg)
if err != nil {
	fmt.Println(err)
	return
}

Pronto, nesse ponto o sistema já leu as configurações e preencheu a struct com o que encontrou. Agora é só usar os valores normalmente.

Isso já é suficiente para a maioria dos sistemas, se você quiser ler um arquivo de configuração basta importar o suporte ao tipo de arquivo correto e indicar o nome do arquivo antes de chamar a função Parse.

Veja o exemplo

import _ "github.com/crgimenes/goconfig/json"
.
.
.
goconfig.File = "config.json"
err := goconfig.Parse(&cfg)
if err != nil {
	fmt.Println(err)
	return
}

Por enquanto apenas o formato json esta implementado. Mas é simples adicionar novos formatos, basta usar o formato json como exemplo, são apenas três funções simples você já tem um novo formato para usar.

Recentemente o Felipe adicionou suporte a TOML o que deixa as coisas ainda mais fáceis de configurar.

Espero que o pacote seja tão útil para você quando esta sendo para mim, caso tenha duvidas, sugestões, ou se encontrou um bug por favor preencha uma issue.

Cesar Gimenes