API实战 ( 3.9. 配置方案的实现 ) 关于环境变量获取疑问

loadEnv 函数
通过 WatchConfig() 监听配置文件变化,文件修改后自动重新加载配置,无需重启服务
使用:Config.Env(“APP_PORT”)

loadConfig 函数
通过 viper.Set(name, fn()) 直接通过代码动态设置配置值,fn() 是立即执行的函数,返回值作为配置值(不支持热更新)
使用:Config.Env(“app.port”)

如果需要热更新 只需要执行 loadEnv
如果不需要热更新 只需要执行 loadConfig

疑问点:
InitConfig 为什么要执行 loadEnv 之后再执行 loadConfig 一次。
补充1:
我猜测这么设计的原因是为了解耦和函数的独立性,将环境变量和配置注册分离,每个函数只做一件事,代码更清晰

    loadEnv 专注于环境变量加载, loadConfig 专注于配置注册

举例场景:
加入有一个配置项需要在环境变量的基础上做处理,这时候就不需要修改环境变量加载的函数(loadEnv)代码,
只需要修改配置注册部分的代码(config.Add)
不知道我这个理解有没有偏差,感谢回答
补充2:
教程上这种处理方式会导致 Config.Env(“app.port”) 和 Config.Env(“APP_PORT”) 两种方式,可能因为.env环境的变化取值导致不一致,这个是不是留有隐患?

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!