You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求提供Helm中merge操作的输入输出示例(官方文档描述不足)

Helm merge 函数示例详解

官方文档对merge的说明:

将两个或多个字典合并为一个,优先保留dest字典的内容:
$newdict := merge $dest $source1 $source2 这是一个深度合并操作但并非深度复制操作。合并后的嵌套对象在两个字典中是同一个实例。如果想要在合并的同时进行深度复制,请结合使用deepCopy函数...

以下是带输入输出的具体示例:

1. 基础合并示例

输入字典

$dest := {
  "name": "my-app",
  "replicas": 2,
  "env": {"LOG_LEVEL": "info"}
}
$source1 := {
  "replicas": 3,
  "image": "nginx:1.25",
  "env": {"DEBUG": "false"}
}

执行合并

$merged := merge $dest $source1

输出结果

{
  "name": "my-app",          # 保留dest的原始值
  "replicas": 2,             # dest中的key优先,不会被source1的值覆盖
  "env": {"LOG_LEVEL": "info", "DEBUG": "false"},  # 嵌套字典深度合并
  "image": "nginx:1.25"      # 新增source1中的key
}

2. 多源字典合并示例

输入字典

在基础示例的基础上新增:

$source2 := {
  "image": "nginx:1.26",
  "resources": {"requests": {"cpu": "100m"}}
}

执行合并

$merged := merge $dest $source1 $source2

输出结果

{
  "name": "my-app",
  "replicas": 2,
  "env": {"LOG_LEVEL": "info", "DEBUG": "false"},
  "image": "nginx:1.26",    # 多个source存在相同key时,最后一个source的值保留
  "resources": {"requests": {"cpu": "100m"}}  # 新增source2中的key
}

3. "非深度复制"特性验证示例

输入字典

$dest := {"config": {"max_size": 100}}
$source := {"config": {"timeout": 30}}

执行合并并修改嵌套对象

$merged := merge $dest $source
# 修改合并后字典的嵌套属性
$_ := set $merged.config "max_size" 200

输出结果(原dest字典的变化)

# 修改后$dest的内容
{"config": {"max_size": 200, "timeout": 30}}

说明:合并后的嵌套对象与原dest的嵌套对象是同一个实例,修改合并结果会同步影响原字典。

4. 结合deepCopy实现合并+深度复制

输入字典

同示例3的$dest和$source

执行深度复制+合并

# 先对dest做深度复制,避免修改影响原字典
$destCopy := deepCopy $dest
$merged := merge $destCopy $source
# 修改合并后字典的嵌套属性
$_ := set $merged.config "max_size" 200

输出结果

# 原dest字典不受影响
{"config": {"max_size": 100}}
# 合并后的字典已修改
{"config": {"max_size": 200, "timeout": 30}}

说明:通过deepCopy复制原dest后再合并,原字典与合并结果的嵌套对象是独立实例,修改合并结果不会影响原字典。

内容的提问来源于stack exchange,提问作者gstackoverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:32:37