代码拉取完成,页面将自动刷新
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})
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。