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}
|