Home >Backend Development >Golang >Override Go app configuration with Environment variable
For at least 10 years, we develop applications to work in containers. I won't be considering advantages and disadvantages of this approach but want to focus on the application flexibility. Almost every dependency, i.e. storage containers like Postgres, MySql, Redis a so on, allows us to override most of the configuration properties via environment variables. Docker containers stimulate us to use environment variables in our containers. But unlike of well-known services programmers develop custom applications on their own approach. I prefer to configure applications using JSON configuration files. But what should I do if in configuration files 100 and more properties, I can't use Environment variable for each property. Instead of this I decided to use JSON config file as a template with working default values and override properties at application start if appropriate environment variables were set.
Nowadays, we don't use a single Docker image; we prefer to have some orchestration, even something simple like docker-compose. In docker-compose we usually create .env-files. As it was mentioned before, environment variables are working well with well-known images like Postgres or MySQL. Consider we are having the following application config (JSON) that is using as an absolutely working template with the default values.
{ "server": { "address": "0.0.0.0", "port": 8182 }, "logging": { "level": "info", "http_log": false, "http_console_out": false } }
We should be able to override any of this value; consider that we should increase log level to debug and enable HTTP logging. For doing this easy, we just have to create technical env variables that have a special name pattern:
Using this go package, you could do it absolutely easy, all what you have to do:
# all previous variables __logging.level="debug" __logging.http_log=true
That's all, and please give us a STAR on GitHub
This approach and package could be used not only for containerized applications but for apps running natively too. This package is successfully working on our authorization server.
The above is the detailed content of Override Go app configuration with Environment variable. For more information, please follow other related articles on the PHP Chinese website!