koanf
pflag
Our great sponsors
koanf | pflag | |
---|---|---|
12 | 13 | |
2,360 | 2,307 | |
- | - | |
7.1 | 0.0 | |
6 days ago | 5 days ago | |
Go | Go | |
MIT License | BSD 3-clause "New" or "Revised" License |
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.
koanf
-
Nees help install knadh/koanf
LINK: https://github.com/knadh/koanf
-
App init and graceful watch lib recommendations ?
For configuration, I like Koanf.
-
Two ways to provide configuration: command-line, yaml file.
Of course. You should always use a good config package. caarlos0/env is okay but https://github.com/knadh/koanf is a better all around solution imo.
- Simplify Your Configurations in Go
-
Golang equivalent of Python’s click (CLT framework)
You can also use Viper with urfave/cli, or you can replace Viper with knadh/koanf, which I personally prefer.
-
Viper – Go Configuration with Fangs
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.
[1] https://github.com/spf13/viper/pull/635
[2] https://github.com/knadh/koanf#alternative-to-viper
-
Extracting embedded files
It's not hard to a) look for a key in an environment variable b) accept a key as a parameter c) load a key from a file d) all of the above with something like koanf
- What are some good open source project to read when learning Go?
-
Coral, a friendly Cobra fork with nearly all its features, but only 4 dependencies
Came across this the other day https://github.com/knadh/koanf as an alternative to Viper.
-
What are your favorite packages to use?
https://github.com/knadh/koanf for config management. Readme contains why it's a good alternative to viper.
pflag
-
issue with pflag flagset
My understanding is that you can use pflag as a drop in replacement of the standard lib's flag (import flag "github.com/spf13/pflag"). So it can be used as a standalone lib I suppose.
-
Which packages do you recommend for building cli tools?
I realy enjoyed the patched version from spf13 with "--" support https://github.com/spf13/pflag
-
Define custom command-line flag types in Go 1.19
Nice, but Cobra (with pflag underneath) is so, so better.
-
-h --help -help help --? -? ????
Not by default on stdlib. There are libraries available though - https://github.com/spf13/pflag
-
Coral, a friendly Cobra fork with nearly all its features, but only 4 dependencies
Flag functionality is provided by the pflag library, a fork of the flag standard library which maintains the same interface while adding POSIX compliance.
-
xflags: An approach to command line flags with support for subcommands, positional args, environment variables, etc.
How does it compare to https://github.com/spf13/pflag ?
-
The flag package: strange but good?
spf13 has a drop in pflag that does the - short and -- long flags.
-
What are your favorite packages to use?
oklog/ulid to generate IDs. coreos/go-oidc for validating JWTs I get from auth. google/go-cmp for comparing structs in tests (unless the project is already using Testify). spf13/pflag because life's too short for Go's flag handling. getkin/kin-openapi for validating reqests/responses against my OpenAPI spec (in tests).
-
akamensky/argparse: Argparse for Golang. Just because "flag" sucks!
What are the benefits of this package over the widely used spf13/pflag?
-
Go’s highly modular nature makes it particularly good for situations where requirements are changing or evolving.
3
What are some alternatives?
viper - Go configuration with fangs
flag - Flag is a simple but powerful command line option parsing library for Go support infinite level subcommand
config - JSON or YAML configuration wrapper with convenient access methods.
cobra - A Commander for modern Go CLI interactions
konfig - Composable, observable and performant config handling for Go for the distributed processing era
kingpin - CONTRIBUTIONS ONLY: A Go (golang) command line and flag parser
cleanenv - ✨Clean and minimalistic environment configuration reader for Golang
go-flags - go command line option parser
kelseyhightower/envconfig - Golang library for managing configuration data from environment variables
complete - bash completion written in go + bash completion for go command
go-simple-config - open source for accessing and storing configuration
argparse - Argparse for golang. Just because `flag` sucks