我有一个GO脚本,可以生成寻呼机的呼叫报告,它有自己的config.yaml文件:
# PagerDuty auth token
pdAuthToken: 12345
# Explicitly set report time range (RFC822)
reportTimeRange:
start: 01 Jan 20 00:00 UTC
end: 01 Feb 20 00:00 UTC
# Rotation general information
rotationInfo:
dailyRotationStartsAt: 8
checkRotationChangeEvery: 30 # minutes
字符串
我需要在config.yaml文件中传递环境变量。我试着这样使用${THE_VARIABLE}
:
reportTimeRange:
start: ${THE_VARIABLE}
型
有没有人可以帮助我如何在config.yaml文件中传递我的Linux环境变量,而不需要编辑脚本。
3条答案
按热度按时间cu6pst1q1#
解组yaml文件后,您可以对结果使用
reflect
来更新其值与您选择的变量格式匹配的任何string
字段。字符串
https://play.golang.org/p/1zuK7Mhtvsa
或者,您可以声明实现
yaml.Unmarshaler
接口的类型,并将这些类型用于配置结构中的字段,这些字段期望相应的yaml属性包含环境变量。型
https://play.golang.org/p/Zy0rXJ7RRdC的
syqv5f0l2#
我的理解是,您希望在程序启动时将占位符
{{ .THE_VARIABLE }}
替换为内存中的环境变量,而不修改yaml文件。我们的想法是将yaml文件加载到一个var中,使用
template.Execute
替换数据。最后解组字符串。我只想简单一点。
YAML文件:
Start: {{ .THE_VARIABLE }}
个替换数据:
字符串
输出量:
Start: 30
个gdrx4gfi3#
最简单的方法是使用
os.ExpandEnv
。在https://go.dev/src/os/env.go中检查os.Expand
以了解它是如何工作的,而os.ExpandEnv
只是Expand(s, Getenv)
的 Package 器。这是如何使用它:读取文件,替换占位符并解析为
yaml
。字符串