diff options
| author | Mitchell Riedstra <mitch@riedstra.dev> | 2025-04-27 10:22:11 -0400 |
|---|---|---|
| committer | Mitchell Riedstra <mitch@riedstra.dev> | 2025-04-27 10:22:11 -0400 |
| commit | c9047cfbc62191ccbe47c2ca0896eb4b192a7223 (patch) | |
| tree | 2438793104a18dffc9bb49b75802a2d64d2c2bfa | |
| download | envflag-c9047cfbc62191ccbe47c2ca0896eb4b192a7223.tar.gz envflag-c9047cfbc62191ccbe47c2ca0896eb4b192a7223.tar.xz | |
Initial
| -rw-r--r-- | go.mod | 3 | ||||
| -rw-r--r-- | main.go | 61 |
2 files changed, 64 insertions, 0 deletions
@@ -0,0 +1,3 @@ +module riedstra.dev/go/envflag + +go 1.11.0 @@ -0,0 +1,61 @@ +// Package envflag is an extremely small bit of code to make configuration +// via environment variables a little bit less of a hassle when using +// the flag package in the standard library. +package envflag + +import ( + "flag" + "fmt" + "os" + "strconv" +) + +// String is a convent way to set value from environment variable, +// and allow override when a command line flag is set. It's assumed `p` is +// not nil. +func String(fl *flag.FlagSet, p *string, name, envvar, usage string) { + if v := os.Getenv(envvar); v != "" { + *p = v + } + + fl.StringVar(p, name, *p, fmt.Sprintf("%s (Environ: '%s')", usage, envvar)) +} + +// Bool is a convent way to set value from environment variable, +// and allow override when a command line flag is set. It's assumed `p` is +// not nil. +func Bool(fl *flag.FlagSet, p *bool, name, envvar, usage string) error { + if v := os.Getenv(envvar); v != "" { + res, err := strconv.ParseBool(v) + + if err != nil { + return fmt.Errorf("Bool: cannot parse '%s=%s', %w", + envvar, v, err) + } + + *p = res + } + + fl.BoolVar(p, name, *p, fmt.Sprintf("%s (Environ: '%s')", usage, envvar)) + + return nil +} + +// Int is a convent way to set value from environment variable, +// and allow override when a command line flag is set. It's assumed `p` is +// not nil. +func Int(fl *flag.FlagSet, p *int, name, envvar, usage string) error { + if v := os.Getenv(envvar); v != "" { + res, err := strconv.ParseInt(v, 10, 32) + if err != nil { + return fmt.Errorf("Int: cannot parse '%s=%s', %w", + envvar, v, err) + } + + *p = int(res) + } + + fl.IntVar(p, name, *p, fmt.Sprintf("%s (Environ: '%s')", usage, envvar)) + + return nil +} |
