VictoriaMetrics/lib/envflag/envflag.go

33 lines
703 B
Go
Raw Normal View History

package envflag
import (
"flag"
"os"
)
// Parse parses environment vars and command-line flags.
//
// Flags set via command-line override flags set via environment vars.
//
// This function must be called instead of flag.Parse() before using any flags in the program.
func Parse() {
flag.Parse()
// Remember explicitly set command-line flags.
flagsSet := make(map[string]bool)
flag.Visit(func(f *flag.Flag) {
flagsSet[f.Name] = true
})
// Obtain the remaining flag values from environment vars.
flag.VisitAll(func(f *flag.Flag) {
if flagsSet[f.Name] {
// The flag is explicitly set via command-line.
return
}
if v, ok := os.LookupEnv(f.Name); ok {
f.Value.Set(v)
}
})
}