0Pricing
Helm Academy · 课时

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 mergeOverwrite 和 dict 进行深度合并
  2. tpl:从 Values 渲染字符串
  3. 使用 range 遍历 .Files.Glob 中的文件
  4. fail 与自定义验证保护
← 返回 Helm Academy