Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ian-kent/Gofigure

Go configuration made easy!
https://github.com/ian-kent/Gofigure

Last synced: 20 days ago
JSON representation

Go configuration made easy!

Awesome Lists containing this project

README

        

gofigure [![GoDoc](https://godoc.org/github.com/ian-kent/gofigure?status.svg)](https://godoc.org/github.com/ian-kent/gofigure) [![Build Status](https://travis-ci.org/ian-kent/gofigure.svg?branch=master)](https://travis-ci.org/ian-kent/gofigure) [![Coverage Status](https://coveralls.io/repos/ian-kent/gofigure/badge.png?branch=master)](https://coveralls.io/r/ian-kent/gofigure?branch=master)
========

Go configuration made easy!

- Just define a struct and call Gofigure
- Supports strings, ints/uints/floats, slices and nested structs
- Supports environment variables and command line flags

Requires Go 1.2+ because of differences in Go's flag package.

### Example

`go get github.com/ian-kent/gofigure`

```go
package main

import "github.com/ian-kent/gofigure"

type config struct {
gofigure interface{} `envPrefix:"BAR" order:"flag,env"`
RemoteAddr string `env:"REMOTE_ADDR" flag:"remote-addr" flagDesc:"Remote address"`
LocalAddr string `env:"LOCAL_ADDR" flag:"local-addr" flagDesc:"Local address"`
NumCPU int `env:"NUM_CPU" flag:"num-cpu" flagDesc:"Number of CPUs"`
Sources []string `env:"SOURCES" flag:"source" flagDesc:"Source URL (can be provided multiple times)"`
Numbers []int `env:"NUMBERS" flag:"number" flagDesc:"Number (can be provided multiple times)"`
Advanced struct{
MaxBytes int64 `env:"MAX_BYTES" flag:"max-bytes" flagDesc:"Max bytes"`
MaxErrors int64 `env:"MAX_ERRORS" flag:"max-errors" flagDesc:"Max errors"`
}
}

func main() {
var cfg config
err := gofigure.Gofigure(&cfg)
if err != nil {
log.Fatal(err)
}
// use cfg
}
```

### gofigure field

The gofigure field is used to configure Gofigure.

The `order` tag is used to set configuration source order, e.g.
environment variables first then command line options second.

Any field matching `camelCase` format will be parsed into `camel`
and `case`, and passed to the source matching `camel`.

For example, the `envPrefix` field is split into `env` and `prefix`,
and the tag value is passed to the environment variable source as
the `prefix` parameter.

### Arrays and environment variables

Array support for environment variables is currently experimental.

To enable it, set `GOFIGURE_ENV_ARRAY=1`.

When enabled, the environment variable is split on commas, e.g.

```
struct {
EnvArray []string `env:"MY_ENV_VAR"`
}

MY_ENV_VAR=a,b,c

EnvArray = []string{"a", "b", "c"}
```

### Licence

Copyright ©‎ 2014, Ian Kent (http://www.iankent.eu).

Released under MIT license, see [LICENSE](LICENSE.md) for details.