1
0
Fork 0
mirror of https://github.com/Luzifer/rconfig.git synced 2024-12-29 23:51:17 +00:00
Package rconfig implements a CLI configuration reader with struct-embedded defaults, environment variables and posix compatible flag parsing
Find a file
Knut Ahlers 28374b7f19
Add hint for go modules to v2
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2019-02-04 17:11:41 +01:00
.travis.yml Add more go versions for tests 2018-09-18 00:24:40 +02:00
autoenv.go Add AutoEnv feature 2018-08-02 12:02:47 +02:00
autoenv_test.go Add AutoEnv feature 2018-08-02 12:02:47 +02:00
bool_test.go Added testcase for using bool with ENV and default 2016-01-20 12:52:21 +01:00
config.go Add support for time.Time flags 2018-09-18 00:19:51 +02:00
duration_test.go Support time.Duration config parameters 2016-06-28 12:31:23 +02:00
errors_test.go Moved tests to Ginkgo 2015-09-08 22:07:40 +02:00
example_test.go Initial version of rconfig 2015-07-12 12:36:18 +02:00
float_test.go Moved tests to Ginkgo 2015-09-08 22:07:40 +02:00
general_test.go Add ParseAndValidate method 2017-06-19 14:23:31 +02:00
go.mod Add go module information 2019-02-04 17:04:46 +01:00
go.sum Add go module information 2019-02-04 17:04:46 +01:00
History.md prepare release v2.2.1 2019-02-04 17:05:10 +01:00
int_test.go Moved tests to Ginkgo 2015-09-08 22:07:40 +02:00
LICENSE Fix LICENSE file 2018-08-02 09:27:24 +02:00
os-args_test.go Moved tests to Ginkgo 2015-09-08 22:07:40 +02:00
precedence_test.go Ensured precdence with a test, added documentation 2015-09-08 23:11:35 +02:00
rconfig_suite_test.go Moved tests to Ginkgo 2015-09-08 22:07:40 +02:00
README.md Add hint for go modules to v2 2019-02-04 17:11:41 +01:00
slice_test.go Breaking: Ensure an empty default string does not yield a slice with 1 element 2018-08-02 09:18:59 +02:00
sub-struct_test.go Moved tests to Ginkgo 2015-09-08 22:07:40 +02:00
time_test.go Add support for time.Time flags 2018-09-18 00:19:51 +02:00
uint_test.go Moved tests to Ginkgo 2015-09-08 22:07:40 +02:00
vardefault_providers.go Added VarDefault functionality 2015-09-08 22:07:57 +02:00
vardefault_test.go Added VarDefault functionality 2015-09-08 22:07:57 +02:00

Build Status Go Report Card Documentation

Description

Package rconfig implements a CLI configuration reader with struct-embedded defaults, environment variables and posix compatible flag parsing using the pflag library.

Installation

Install by running:

go get -u github.com/Luzifer/rconfig

OR fetch a specific version:

go get -u gopkg.in/luzifer/rconfig.v2

Run tests by running:

go test -v -race -cover github.com/Luzifer/rconfig

Usage

A very simple usecase is to just configure a struct inside the vars section of your main.go and to parse the commandline flags from the main() function:

package main

import (
  "fmt"
  "github.com/Luzifer/rconfig"
)

var (
  cfg = struct {
    Username string `default:"unknown" flag:"user" description:"Your name"`
    Details  struct {
      Age int `default:"25" flag:"age" env:"age" description:"Your age"`
    }
  }{}
)

func main() {
  rconfig.Parse(&cfg)

  fmt.Printf("Hello %s, happy birthday for your %dth birthday.",
    cfg.Username,
    cfg.Details.Age)
}

In Go 1.11 support for Go modules was added. To import the current version using Go modules use this import:

import rconfig "github.com/Luzifer/rconfig/v2"

Provide variable defaults by using a file

Given you have a file ~/.myapp.yml containing some secrets or usernames (for the example below username is assumed to be "luzifer") as a default configuration for your application you can use this source code to load the defaults from that file using the vardefault tag in your configuration struct.

The order of the directives (lower number = higher precedence):

  1. Flags provided in command line
  2. Environment variables
  3. Variable defaults (vardefault tag in the struct)
  4. default tag in the struct
var cfg = struct {
  Username string `vardefault:"username" flag:"username" description:"Your username"`
}

func main() {
  rconfig.SetVariableDefaults(rconfig.VarDefaultsFromYAMLFile("~/.myapp.yml"))
  rconfig.Parse(&cfg)

  fmt.Printf("Username = %s", cfg.Username)
  // Output: Username = luzifer
}

More info

You can see the full reference documentation of the rconfig package at godoc.org, or through go's standard documentation system by running godoc -http=:6060 and browsing to http://localhost:6060/pkg/github.com/Luzifer/rconfig after installation.