env.go

 1package env
 2
 3import (
 4	"os"
 5)
 6
 7type Env interface {
 8	Get(key string) string
 9	Env() []string
10}
11
12type osEnv struct{}
13
14// Get implements Env.
15func (o *osEnv) Get(key string) string {
16	return os.Getenv(key)
17}
18
19func (o *osEnv) Env() []string {
20	return os.Environ()
21}
22
23func New() Env {
24	return &osEnv{}
25}
26
27type mapEnv struct {
28	m map[string]string
29}
30
31// Get implements Env.
32func (m *mapEnv) Get(key string) string {
33	if value, ok := m.m[key]; ok {
34		return value
35	}
36	return ""
37}
38
39// Env implements Env.
40func (m *mapEnv) Env() []string {
41	env := make([]string, 0, len(m.m))
42	for k, v := range m.m {
43		env = append(env, k+"="+v)
44	}
45	return env
46}
47
48func NewFromMap(m map[string]string) Env {
49	if m == nil {
50		m = make(map[string]string)
51	}
52	return &mapEnv{m: m}
53}