aconfig
viper
Our great sponsors
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
aconfig
-
Library for loading configuration into a struct in Go
Well, now I see my project is very similar to this https://github.com/cristalhq/aconfig
- What are your favorite packages to use?
viper
-
Spf13 Google
I contribute to open source projects as well - in various ways - and it's fine for a maintainer of a huge project to use that wording.
He pushed hugo and viper in 2013-2014: https://github.com/gohugoio/hugo/commits/v0.7, viper: https://github.com/spf13/viper/commit/98be071
Steve is a very accomplished programmer, with what hugo / viper became in the go ecosystem by itself. In my view, the projects also jumpstarted a lot of new users who were trying out golang who weren't sold on it yet. I didn't really appreciate his leadership or advisory roles until now, that's just icing on the cake.
Thanks for your contributions, Steve!
-
Botway - 🤖 Generate, build, handle and deploy your own bot with your favorite language, for Discord, or Telegram, or Slack.
Viper
- viper fails to unmarshal slice flag
- Viper - Go configuration with fangs
-
Viper – Go Configuration with Fangs
https://github.com/spf13/viper/blob/master/go.mod
16 direct dependencies, 39 transitive dependencies, and nearly 7000 lines of code -- for a package that handles flags and config files. I can't help feeling that frameworks like this are a little overwrought. It's the sort of project that succeeds because thousands of people just need something that works, right away, search for "golang config," and click the top result. If you can afford to slow down a little, you may find that you can config your app just fine with a few stdlib imports and a bit of glue.
Use viper with care. It has some dangerous fundamental flaws [1]. We got bitten hard, submitted a PR [2] and followed up for a year and a half to no avail, before I went ahead and reinvented the wheel and wrote koanf (plug), specifically to avoid viper's flaws.
Most importantly:
- Breaks JSON, YAML, TOML etc. language specs by forcibly lowercasing all keys internally. Dangerous because it can silently merge differently cased config keys into lowercase.
- Hard codes big unnecessary dependencies into the core, significantly bloating build sizes. No separation or abstraction.
-
14 great tips to make amazing CLI applications
configuration files. A few command line option libraries provide the option to use a configuration file alongside the command line parser (for example viper in golang). Otherwise, nothing is easier to use a JSON, YAML, or TOML parser to read in defaults and overrides.
-
Simple configuration for apps
Thanks, it basically bunch of battle-tested tools like viper, defaults, validators put together
-
CLI plugin manager for (neo)vim
Just for your information: viper is also a popular go package.
What are some alternatives?
godotenv - A Go port of Ruby's dotenv library (Loads environment variables from `.env`.)
envconfig - Small library to read your configuration from environment variables
koanf - Simple, lightweight, extensible, configuration management library for Go. Support for JSON, TOML, YAML, env, command line, file, S3 etc. Alternative to viper.
mapstructure - Go library for decoding generic map values into native Go structures and vice versa.
kelseyhightower/envconfig - Golang library for managing configuration data from environment variables
ini - Package ini provides INI file read and write functionality in Go
goConfig - goconfig uses a struct as input and populates the fields of this struct with parameters from command line, environment variables and configuration file.
config - JSON or YAML configuration wrapper with convenient access methods.
go-toml - Go library for the TOML file format
cleanenv - ✨Clean and minimalistic environment configuration reader for Golang
validator - :100:Go Struct and Field validation, including Cross Field, Cross Struct, Map, Slice and Array diving
env - A simple and zero-dependencies library to parse environment variables into structs.