/
env.go
36 lines (32 loc) · 919 Bytes
/
env.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Package envexpvar exposes process environmental variables
// via expvar
package envexpvar
import (
"expvar"
"strings"
"syscall"
)
// Env returns the current OS environment for this running process.
func Env() map[string]string {
vals := syscall.Environ()
e := make(map[string]string, len(vals))
for _, i := range vals {
// this is not particularly speedy. Good enough for a first try
parts := strings.SplitN(i, "=", 2)
k := parts[0]
// There can be multiple values for an environment variable (see stdlib syscall source)
// so just call Getenv on each. We could optimize and do the "magic" here, but
// there is little performance gane to be had for potentially buggy code.
if v, ok := syscall.Getenv(k); ok {
e[k] = v
}
}
return e
}
// helper to "cast" for expvar
func env() interface{} {
return interface{}(Env())
}
func init() {
expvar.Publish("environment", expvar.Func(env))
}