/go-env

a golang library to manage environment variables

Primary LanguageGoApache License 2.0Apache-2.0

go-env

Build Status GoDoc NetflixOSS Lifecycle

Package env provides an env struct field tag to marshal and unmarshal environment variables.

Usage

package main

import (
  "log"

  env "github.com/Netflix/go-env"
)

type Environment struct {
  Home string `env:"HOME"`

  Jenkins struct {
    BuildId     *string `env:"BUILD_ID"`
    BuildNumber int    `env:"BUILD_NUMBER"`
    Ci          bool   `env:"CI"`
  }

  Extras env.EnvSet
}

func main() {
  var environment env.Environment
  es, err := env.UnmarshalFromEnviron(&environment)
  if err != nil {
    log.Fatal(err)
  }
  // Remaining environment variables.
  environment.Extras = es

  // ...

  es, err = env.Marshal(environment)
  if err != nil {
    log.Fatal(err)
  }

  cs := env.ChangeSet{
    "HOME": "/tmp/edgarl",
    "BUILD_ID": nil,
    "BUILD_NUMBER": nil,
  }
  es.Apply(cs)

  environment = env.Environment{}
  err = env.Unmarshal(es, &environment)
  if err != nil {
    log.Fatal(err)
  }

  environment.Extras = es
}