goenv库将环境变量的值设置到一个结构体里, 以方便使用。类似于encoding/json解析到结构体。

背景

为了简化docker的发布,把配置从配置文件里抽取出来,设置到环境变量里。然后发布docker 容器的时候就不需要再带一个配置文件了。

文档

goenv的使用非常简单,首先定义一个结构体,结构体里需要解析环境变时的字段,则使用 golang的tag机制,加上`env:"name"` 的tag,再调用Unmarshal函数就可以直接解 析到结构体里了。

以下是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import "fmt"
import "github.com/tenfyzhong/goenv"
type Number struct {
zero int `env:"zero"`
One int `env:"one"`
Two int `env:"two"`
Three bool `env:"three"`
Four string `env:"four"`
Five string
Six *int8 `env:"six"`
Sevent uint `env:"sevent"`
Eight float32 `env:"eight"`
Nine bool `env:"nine"`
Ten *bool `env:"ten"`
}
func main() {
n = &Number{}
err := goenv.Unmarshal(n)
if err == nil {
fmt.Println(n)
}
}

因为环境变量是扁平化的,所以只支持单级别的配置。目前支持以下的数据类型: bool, string, int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, float32, float64

对于bool类型,如果环境变量没设,则为false,其他值都为true。

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import "fmt"
import "github.com/tenfyzhong/goenv"
type Number struct {
zero int `env:"zero"`
One int `env:"one"`
Two int `env:"two"`
Three bool `env:"three"`
Four string `env:"four"`
Five string
Six *int8 `env:"six"`
Sevent uint `env:"sevent"`
Eight float32 `env:"eight"`
Nine bool `env:"nine"`
Ten *bool `env:"ten"`
}
func main() {
n = &Number{}
err := goenv.Unmarshal(n)
if err == nil {
fmt.Println(n)
}
}