思源笔记社区正在搭建中,现邀您共建
SiYuan Community is under construction. Join us to co-build.
dict(dictionary 的缩写,类比 Python 中的字典)的键/值存储类型。dict 是一个无序类型。dict 或 list。list 不同,dict 是可变的。set 和 unset 函数将修改字典的内容。dictdict 函数并传递一个键值对的列表来创建字典。$myDict := dict "key1" "value1" "key2" "value2" "key3" "value 3"getget $myDict "key1""value1"。""。不会生成错误。setset 向字典中添加一个新的键值对。$_ := set $myDict "key4" "value4"set 返回字典*(这是 Go 模板函数的要求),因此您可能需要像上面的 $* 赋 值一样捕获该值。unset$_ := unset $myDict "key4"set 类似,这会返回字典。hasKeyhasKey 函数将返回 true。hasKey $myDict "key1"false。pluckpluck 函数可以获取所有匹配项的列表:pluck "name1" $myDict $myOtherDictlist([value1 otherValue1])。pluck 时传入的字典数量)。pluck ... | first 的常见用法是从一组字典中获取第一个匹配的键。digdig 函数使用一个键名列表访问嵌套的字典集。dig "user" "role" "humanName" "guest" $dict{
user: {
role: {
humanName: "curator"
}
}
}"curator"。如果字典甚至缺少 user 字段,则结果将是给定的默认值 "guest"。dig 在你想避免守卫语句的情况下非常有用,特别是因为 Go 的模板包的 and 不会进行快速路由。例如,and a.maybeNil a.maybeNil.iNeedThis 将始终评估 a.maybeNil.iNeedThis,如果 a 缺少 maybeNil 字段则会引发错误。dig 函数在最后接受字典参数以支持管道操作。例如:merge a b c | dig "one" "two" "three" "<missing>"merge, mustMerge$newdict := merge $dest $source1 $source2deepCopy 函数与合并一起使用。例如:deepCopy $source | merge $destmustMerge 在合并失败时会返回错误。mergeOverwrite, mustMergeOverwritedst:
default: default
overwrite: me
key: true
src:
overwrite: overwritten
key: falsenewdict:
default: default
overwrite: overwritten
key: false$newdict := mergeOverwrite $dest $source1 $source2deepCopy 函数与合并一起使用。例如:deepCopy $source | mergeOverwrite $destmustMergeOverwrite 在合并失败时会返回错误。keyskeys 函数将返回一个包含一个或多个 dict 中所有键名组成的 list。sortAlpha 对键进行排序。keys $myDict | sortAlphauniq 函数和 sortAlpha 来获得一个唯一的、排序的键列表。keys $myDict $myOtherDict | uniq | sortAlphapickpick 函数从一个字典中仅选择给定的键,创建一个新的 dict。$new := pick $myDict "key1" "key2"{key1: value1, key2: value2}omitomit 函数类似于 pick,但它返回一个新的 dict,其中包含所有与给定键不匹配的键。$new := omit $myDict "key1" "key3"{key2: value2}valuesvalues 函数类似于 keys,但它返回一个新的 list,其中包含源 dict 的所有值(仅支持一个字典)。$vals := values $myDictlist["value1", "value2", "value 3"]。请注意,values 函数对结果排序不作任何保证,如果您关心这一点,请使用 sortAlpha。deepCopy, mustDeepCopydeepCopy 和 mustDeepCopy 函数接受一个值并对该值进行深拷贝。这包括字典和其他结构。deepCopy 会抛出一个 panics,而 mustDeepCopy 会将错误返回给模板系统。dict "a" 1 "b" 2 | deepCopydict 以 map[string]interface{} 的形式实现。Go 开发人员可以将 map[string]interface{} 值传递到上下文中,以使它们在模板中作为 dict 使用。