Skip to content

douglasmakey/envi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ENVI

Golang library for managing configuration from environment variables

Usage

Basic example (in examples folder):

package main

import (
    "fmt"
    "github.com/douglasmakey/envi"
)

type environments struct {
    Intent int            `env:"INTENT"`
    Ports  []int          `env:"PORTS" envDefault:"3000"`
    IsProd bool           `env:"PROD,required"`
    IsDev  bool           `env:"DEV"`
    Hosts  []string       `env:"HOSTS" envSeparator:":"`
    Sector map[string]int `env:"SECTOR"`
}

func main() {
    env := environments{}
    err := envi.Parse(&env)
    if err != nil {
        // You can handle the errors as follows
        if e, ok := err.(*envi.EnvError); ok {
            switch e.Err {
            case envi.IsRequired:
                // You can get info details using
                // e.KeyName --> Name of key
                // e.Value --> Value
                panic(e.Error())
            }
        }

        fmt.Println(err)
	}

    fmt.Printf("%+v\n", env)
}

You can run it like this:

$ INTENT=5 PROD=true HOSTS="127.0.0.1:localhost" SECTOR="a:1,b:2,c:4"  go run examples/examples.go
Intent:5 Ports:[3 0 0 0] IsProd:true IsDev:false Hosts:[127.0.0.1 localhost] Sector:map[a:1 b:2 c:4]}

Supported types and defaults

This library has support for the following types:

  • string
  • int
  • uint
  • int64
  • bool
  • float32
  • float64
  • Map[string]int
  • Map[string]string
  • []string
  • []int
  • []bool
  • []float32
  • []float64

You can use the tag envDefault to add some default value, this value will be used in the case of absence of it in the environment. If you don't do that AND the environment variable is also not set, the zero-value of the type will be used: empty for strings, false for bools and 0 for ints.

By default, the values on slices type will be splitted by ,; you can change this behavior by setting the envSeparator tag.

The env tag option required for example env:"MyKey,required" can be added to ensure that some critical environment variable is set.

TODO

  • Implement errors handler
  • Implement httpHandler for list env and change value.

Releases

No releases published

Packages

No packages published

Languages