golang 环境变量填充struct

env to golang struct

caarlos0/env是一个第三方开源的环境变量库,支持转化成struct

Github:https://github.com/caarlos0/env

官方文档:https://godoc.org/github.com/caarlos0/env

用途

  • 将环境变量转化成Go中的Struct的库
  • 可以将项目的配置通过环境变量的形式传入

用法介绍

  • struct 中每个变量需要带上env的标签
  • 如果是数组,需要设置envSeparator
  • 如果设置envExpand标记,则将根据变量的实际值替换字符串中的环境变量(格式${var}或 $var格式),未导出的字段将被忽略。

Example

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
package main

import (
"fmt"
"time"

"github.com/caarlos0/env"
)

type config struct {
Home string `env:"HOME"`
Port int `env:"PORT" envDefault:"3000"`
IsProduction bool `env:"PRODUCTION"`
Hosts []string `env:"HOSTS" envSeparator:":"`
Duration time.Duration `env:"DURATION"`
TempFolder string `env:"TEMP_FOLDER" envDefault:"${HOME}/tmp" envExpand:"true"`
}

func main() {
cfg := config{}
if err := env.Parse(&cfg); err != nil {
fmt.Printf("%+v\n", err)
}

fmt.Printf("%+v\n", cfg)
}
  • 运行
    1
    2
    3
    $ PRODUCTION=true HOSTS="host1:host2:host3" DURATION=1s go run main.go

    {Home:/your/home Port:3000 IsProduction:true Hosts:[host1 host2 host3] Duration:1s}