if v, ok := os.LookupEnv("IDAASHTTPPORT"); ok {
c.HTTPPort, _ = strconv.Atoi(v)
}
if v, ok := os.LookupEnv("IDAASDBNAME"); ok {
c.DBUserName = v
}
if v, ok := os.LookupEnv("IDAASDBPW"); ok {
c.DBPasswd = v
}
if v, ok := os.LookupEnv("IDAASDBPORT"); ok {
c.DBPort, _ = strconv.Atoi(v)
}
if v, ok := os.LookupEnv("IDAASDBHOST"); ok {
c.DBHost = v
}
'c'是以下结构
type Configuration struct {
HTTPPort int
DBUserName string
DBPasswd string
DBPort int
DBHost string
}
如果环境变量存在,我只想更新struct字段。看起来像一些可爱的小地图迭代器或类似的东西可以工作,但是我找不到一个好的解决方案。
您可以使用一些辅助功能:
func setIntFromEnv(val *int, envName string) {
if v, ok := os.LookupEnv(envName); ok {
*val, _ = strconv.Atoi(v)
}
}
func setStringFromEnv(val *string, envName string) {
if v, ok := os.LookupEnv(envName); ok {
*val = v
}
}
// From your main function.
setIntFromEnv(&c.HTTPPort, "IDAASHTTPPORT")
setStringFromEnv(&c.DBUserName, "IDAASDBNAME")
etc...
仅当您可以忽略要解析为int的字符串env var时,这才有效。它的相对优雅也值得商bat。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句