使用 mergeOverwrite 和 dict 进行深度合并
以编程方式组合结构化值
使用 mergeOverwrite 和 dict 进行深度合并 是 CoddyKit 上的免费 Helm Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Helm Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Helm Academy 课程共包含 4 节课。
在模板中构建映射
有时您需要在模板中组装一个映射。dict 函数通过交替排列的键值对创建映射。
{{ $cfg := dict "level" "info" "json" true }}为什么要组合映射
您通常同时拥有 Chart 默认值和用户覆盖值,并希望得到一个组合后的映射。这正是 merge 的作用。
浅层合并
merge 函数会将源映射中的键复制到目标映射中,但当某个键已经存在时,会保留目标值。
{{ $out := merge $user $defaults }}merge 偏向目标映射
使用 merge 时,第一个参数会在键发生冲突时获胜,因此当用户输入应该覆盖默认值时,这个函数非常合适。
认识 mergeOverwrite
mergeOverwrite 函数的行为正好相反:后面的源映射会覆盖目标映射,将值逐层叠加上去。
{{ $out := mergeOverwrite $defaults $user }}深层而非浅层
两个辅助函数都会进行递归合并:嵌套映射会按键逐一组合,而不是将整个子树整体替换。
修改警告
请注意:merge 和 mergeOverwrite 会就地修改它们的第一个参数。如果必须保留原始内容,请传入一个新的 dict。
{{ $base := dict }}{{ $r := mergeOverwrite $base .Values.extra }}分层默认值模式
一种常见的模式是从默认值 dict 开始,然后将用户值叠加在上面,这样未设置的键就能安全地回退。
{{ $merged := mergeOverwrite (dict "port" 80) .Values.service }}读取合并后的值
合并完成后,您可以像处理任何映射一样处理结果,并照常使用 dot 或 index 函数取出键。
{{ $merged.port }}序列化结果
要将合并后的结构输出为 YAML,请通过 toYaml 和 nindent 传递它,使代码块处于正确的缩进位置。
{{ toYaml $merged | nindent 4 }}取出一个键
当键名是动态的或包含特殊字符时,请使用 index 函数访问映射,而不是使用点号访问。
{{ index $merged "log-level" }}快速检查
快速检查覆盖方向。
回顾
您了解了使用 dict 构建映射,使用 merge 保留目标键,以及使用 mergeOverwrite 让后面的值获胜;它们都会进行深层合并。🎉
常见问题解答
「使用 mergeOverwrite 和 dict 进行深度合并」课时是免费的吗?
是的 — 「使用 mergeOverwrite 和 dict 进行深度合并」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Helm Academy 课程的其余内容,请升级到 CoddyKit PRO。 Helm Academy 课程共包含 4 节课。
「使用 mergeOverwrite 和 dict 进行深度合并」这节课中我会学到什么?
以编程方式组合结构化值 你通过在浏览器中直接运行的动手代码来练习 Helm Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Helm Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Helm Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「使用 mergeOverwrite 和 dict 进行深度合并」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Helm Academy 课中编写并运行代码吗?
能。每节 Helm Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 mergeOverwrite 和 dict 进行深度合并
- tpl:从 Values 渲染字符串
- 使用 range 遍历 .Files.Glob 中的文件
- fail 与自定义验证保护