1 Star 0 Fork 0

木桩 / wgs.ths.config.go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
renderer_env.go 1.22 KB
一键复制 编辑 原始数据 按行查看 历史
木桩 提交于 2023-12-04 16:16 . [v0_1][Feature] 完成基础实现
package config
import (
"fmt"
"os"
"reflect"
)
type RendererEnv struct {
sort int
bond [][2]string
}
func NewRendererEnv(sort int) *RendererEnv {
return &RendererEnv{
sort: sort,
bond: make([][2]string, 0, 8),
}
}
func (r *RendererEnv) Name() string {
return "env"
}
func (r *RendererEnv) Sort() int {
return r.sort
}
func (r *RendererEnv) Render(body reflect.Value, desc *ConfigDesc) error {
for _, pair := range r.bond {
path := pair[0]
env := pair[1]
if err := r.parseEnvToPath(body, desc, path, env); err != nil {
return err
}
}
return nil
}
func (r *RendererEnv) parseEnvToPath(body reflect.Value, desc *ConfigDesc, path, env string) error {
envVal, ok := os.LookupEnv(env)
if !ok {
return nil
}
rv, err := findFieldInBody(body, desc, path)
if err != nil {
return err
}
if rv.Kind() == reflect.Invalid {
return nil
}
if err := setValueFromString(rv, envVal); err != nil {
return fmt.Errorf("config: set env [%s] value [%s] to [%s] failed: %v", env, envVal, path, err)
}
return nil
}
func (r *RendererEnv) BindEnv(path string, env string) {
for i, pair := range r.bond {
if pair[0] == path {
r.bond[i][1] = env
return
}
}
r.bond = append(r.bond, [2]string{path, env})
}
Go
1
https://gitee.com/woodpile/wgs.ths.config.go.git
git@gitee.com:woodpile/wgs.ths.config.go.git
woodpile
wgs.ths.config.go
wgs.ths.config.go
v0.1.3

搜索帮助