如何在Go模板中通过变量值引用另一个变量?
问题
如何在Go模板中使用一个变量的值来引用另一个变量?
现有模板代码:
Hello, {{ index $.planet }}!
对应的数据结构:
{ "planet": "neptune", "planet_field": "planet" }
需求是用planet_field的值替代硬编码的planet,最终输出Hello, neptune!,且无法修改数据结构,该场景适用于仅通过标签获取数据的Prometheus告警模板。
解决方法
Go模板的index函数支持传入动态键名,你可以先获取planet_field的字段值,再用它作为键去访问根对象中的对应字段。
直接使用的写法:
Hello, {{ index $ (.planet_field) }}!
如果需要提升可读性,可以先把字段名存为变量再使用:
{{ $fieldName := .planet_field }} Hello, {{ index $ $fieldName }}!
原理说明
$在Go模板中代表根数据对象,也就是你传入的整个JSON结构.planet_field会先解析出它的实际值"planet"index $ (.planet_field)等价于用"planet"作为键,从根对象中取出对应的"neptune"值
验证示例
使用修改后的模板和原数据结构,最终输出结果为:
Hello, neptune!
内容的提问来源于stack exchange,提问作者Aref Khandan
相关产品推荐
相关产品推荐

