Paerser
Loads configuration from many sources
- CLI flags - Configuration files in YAML, TOML, JSON format - Environment variables The project is written primarily in Go, distributed under the Apache License 2.0 license, first published in 2020. Key topics include: cli-flags, configuration, environment-variables, go, golang.
Paerser
Features
Loads configuration from many sources:
- CLI flags
- Configuration files in YAML, TOML, JSON format
- Environment variables
It also provides a simple CLI commands handling system.
Examples
Configuration
CLI Flags
gopackage flag_test import ( "log" "github.com/davecgh/go-spew/spew" "github.com/traefik/paerser/flag" ) type ConfigExample struct { Foo string Bar Bar Great bool } type Bar struct { Sub *Sub List []string } type Sub struct { Name string Value int } func ExampleDecode() { args := []string{ "--foo=aaa", "--great=true", "--bar.list=AAA,BBB", "--bar.sub.name=bbb", "--bar.sub.value=6", } config := ConfigExample{} err := flag.Decode(args, &config) if err != nil { log.Fatal(err) } spew.Config = spew.ConfigState{ Indent: "\t", DisablePointerAddresses: true, } spew.Dump(config) // Output: // (flag_test.ConfigExample) { // Foo: (string) (len=3) "aaa", // Bar: (flag_test.Bar) { // Sub: (*flag_test.Sub)({ // Name: (string) (len=3) "bbb", // Value: (int) 6 // }), // List: ([]string) (len=2 cap=2) { // (string) (len=3) "AAA", // (string) (len=3) "BBB" // } // }, // Great: (bool) true // } }
File
gopackage file_test import ( "fmt" "log" "os" "github.com/davecgh/go-spew/spew" "github.com/traefik/paerser/file" ) type ConfigExample struct { Foo string Bar Bar Great bool } type Bar struct { Sub *Sub List []string } type Sub struct { Name string Value int } func ExampleDecode() { tempFile, err := os.CreateTemp("", "paeser-*.yml") if err != nil { log.Fatal(err) } defer func() { _ = os.RemoveAll(tempFile.Name()) }() data := ` foo: aaa bar: sub: name: bbb value: 6 list: - AAA - BBB great: true ` _, err = fmt.Fprint(tempFile, data) if err != nil { log.Fatal(err) } // Read configuration file filePath := tempFile.Name() config := ConfigExample{} err = file.Decode(filePath, &config) if err != nil { log.Fatal(err) } spew.Config = spew.ConfigState{ Indent: "\t", DisablePointerAddresses: true, } spew.Dump(config) // Output: // (file_test.ConfigExample) { // Foo: (string) (len=3) "aaa", // Bar: (file_test.Bar) { // Sub: (*file_test.Sub)({ // Name: (string) (len=3) "bbb", // Value: (int) 6 // }), // List: ([]string) (len=2 cap=2) { // (string) (len=3) "AAA", // (string) (len=3) "BBB" // } // }, // Great: (bool) true // } }
Environment Variables
gopackage env_test import ( "log" "os" "github.com/davecgh/go-spew/spew" "github.com/traefik/paerser/env" ) type ConfigExample struct { Foo string Bar Bar Great bool } type Bar struct { Sub *Sub List []string } type Sub struct { Name string Value int } func ExampleDecode() { _ = os.Setenv("MYAPP_FOO", "aaa") _ = os.Setenv("MYAPP_GREAT", "true") _ = os.Setenv("MYAPP_BAR_LIST", "AAA,BBB") _ = os.Setenv("MYAPP_BAR_SUB_NAME", "bbb") _ = os.Setenv("MYAPP_BAR_SUB_VALUE", "6") config := ConfigExample{} err := env.Decode(os.Environ(), "MYAPP_", &config) if err != nil { log.Fatal(err) } spew.Config = spew.ConfigState{ Indent: "\t", DisablePointerAddresses: true, } spew.Dump(config) // Output: // (env_test.ConfigExample) { // Foo: (string) (len=3) "aaa", // Bar: (env_test.Bar) { // Sub: (*env_test.Sub)({ // Name: (string) (len=3) "bbb", // Value: (int) 6 // }), // List: ([]string) (len=2 cap=2) { // (string) (len=3) "AAA", // (string) (len=3) "BBB" // } // }, // Great: (bool) true // } }
CLI Commands
goTODO
Contributors
Showing top 9 contributors by commit count.
This article is auto-generated from traefik/paerser via the GitHub API.Last fetched: 6/26/2026
