env.go

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