1. 字典函数

Helm 提供了一个key/value存储类型称为dict("dictionary"的简称,Python中也有)。dict是无序类型。

字典的key 必须是字符串。但值可以是任意类型,甚至是另一个dict 或 list。

不像list, dict不是不可变的。set和unset函数会修改字典的内容。

Helm 提供了以下函数支持使用字典: deepCopy(mustDeepCopy), dict, get, hasKey, keys, merge (mustMerge), mergeOverwrite (mustMergeOverwrite), omit, pick, pluck, set, unset,和 values。

1.1. dict

通过调用 dict 函数并传递一个键值对列表创建字典。

下面是创建三个键值对的字典:

$myDict := dict "name1" "value1" "name2" "value2" "name3" "value 3"

1.2. get

给定一个映射和一个键,从映射中获取值。

get $myDict "name1"

上述结果为: "value1"

注意如果没有找到,会简单返回""。不会生成error。

1.3. set

使用set给字典添加一个键值对。

$_ := set $myDict "name4" "value4"

注意set 返回字典 (Go模板函数的一个要求),因此你可能需要像上面那样使用使用$_赋值来获取值。

1.4. unset

给定一个映射和key,从映射中删除这个key。

$_ := unset $myDict "name4"

和set一样,需要返回字典。

注意,如果key没有找到,这个操作会简单返回,不会生成错误。

1.5. hasKey

hasKey函数会在给定字典中包含了给定key时返回true。

hasKey $myDict "name1"

如果key没找到,会返回false。

1.6. pluck

pluck 函数给定一个键和多个映射,并获得所有匹配项的列表:

pluck "name1" $myDict $myOtherDict

上述会返回的list包含了每个找到的值([value1 otherValue1])。

如果key在映射中 没有找到 ,列表中的映射就不会有内容(并且返回列表的长度也会小于调用pluck的字典)。

如果key是 存在的, 但是值是空值,会插入一个值。

Helm模板中的一个常见用法是使用 pluck... | first 从字典集合中获取第一个匹配的键。

1.7. merge, mustMerge

将两个或多个字典合并为一个, 目标字典优先:

$newdict := merge $dest $source1 $source2

这是个深度合并操作,但不是深度拷贝操作。合并的嵌套对象是两个字典上的同一实例。如果想深度合并的同时进行深度拷贝, 合并的时候同时使用deepCopy函数,比如:

deepCopy $source | merge $dest

mustMerge 会返回错误,以防出现不成功的合并。

1.8. mergeOverwrite, mustMergeOverwrite

合并两个或多个字典,优先按照 从右到左,在目标字典中有效地覆盖值:

给定的:

dst:
  default: default
  overwrite: me
  key: true

src:
  overwrite: overwritten
  key: false

会生成:

newdict:
  default: default
  overwrite: overwritten
  key: false
$newdict := mergeOverwrite $dest $source1 $source2

这是一个深度合并操作但不是深度拷贝操作。两个字典上嵌入的对象被合并到了同一个实例中。如果你想在合并的同时进行深度拷贝, 使用deepCopy函数,比如:

deepCopy $source | mergeOverwrite $dest

mustMergeOverwrite 会返回错误,以防出现不成功的合并。

1.9. keys

keys函数会返回一个或多个dict类型中所有的key的list。由于字典是 无序的,key不会有可预料的顺序。 可以使用sortAlpha存储。

keys $myDict | sortAlpha

当提供了多个词典时,key会被串联起来。使用uniq函数和sortAlpha获取一个唯一有序的键列表。

keys $myDict $myOtherDict | uniq | sortAlpha

1.10. pick

pick函数只从字典中选择给定的键,并创建一个新的dict。

$new := pick $myDict "name1" "name2"

上述结果为: {name1: value1, name2: value2}

1.11. omit

omit函数类似于pick,除它之外返回一个新的dict,所有的key 不 匹配给定的key。

$new := omit $myDict "name1" "name3"

上述结果为: {name2: value2}

1.12. values

values函数类似于keys,返回一个新的list包含源字典中所有的value(只支持一个字典)。

$vals := values $myDict

上述结果为: list["value1", "value2", "value 3"]。注意 values不能保证结果的顺序;如果你需要顺序, 请使用sortAlpha。

1.13. deepCopy, mustDeepCopy

deepCopy 和 mustDeepCopy 函数给定一个值并深度拷贝这个值。包括字典和其他结构体。 deepCopy有问题时会出错, 而mustDeepCopy会返回一个错误给模板系统。

dict "a" 1 "b" 2 | deepCopy

2. 字典的内部说明

dict 在Go里是作为map[string]interface{}执行的。Go开发者可以传map[string]interface{}值给上下文, 将其作为 dict 提供给模板。

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2022-01-08 03:09:47

results matching ""

    No results matching ""