列表与列表函数
Sprig 提供了一个简单的 “list” 类型,可以包含任意顺序的数据列表。这类似于数组或切片,但列表被设计用作不可变的数据类型。
创建一个整数列表:
$myList := list 1 2 3 4 5上面创建了一个列表 [1 2 3 4 5]。
first,mustFirst
要获取列表的第一项,请使用 first。
first $myList 返回 1
如果有问题,则 first 会产生 panic,而 mustFirst 会返回错误到模板引擎。
rest,mustRest
要获取列表的尾部(除第一项外的所有项),请使用 rest。
rest $myList 返回 [2 3 4 5]
如果有问题,则 rest 会产生 panic,而 mustRest 会返回错误到模板引擎。
last,mustLast
要获取列表的最后一项,请使用 last:
last $myList 返回 5。这基本上相当于反转列表然后调用 first。
initial,mustInitial
要获取列表除最后一个元素外的所有元素,请使用 initial。 initial $myList 返回 [1 2 3 4]。
如果有问题,则 initial 会产生 panic,而 mustInitial 会返回错误到模板引擎。
append,mustAppend
将新元素附加到现有列表的尾部,创建一个新列表。
$new = append $myList 6上面将 $new 设置为 [1 2 3 4 5 6]。$myList 将保持不变。
如果有问题,则 append 会产生 panic,而 mustAppend 会返回错误到模板引擎。
prepend,mustPrepend
将元素推入现有列表的首部,创建一个新列表。
prepend $myList 0上面会产生 [0 1 2 3 4 5]。$myList 将保持不变。
如果有问题,则 prepend 会产生 panic,而 mustPrepend 会返回错误到模板引擎。
concat
将任意数量的列表连接成一个列表。
concat $myList ( list 6 7 ) ( list 8 )上面会产生 [1 2 3 4 5 6 7 8]。$myList 将保持不变。
reverse,mustReverse
生成一个具有给定列表的元素顺序翻转的新列表。
reverse $myList上面将生成列表 [5 4 3 2 1]。
如果有问题,则 reverse 会产生 panic,而 mustReverse 会返回错误到模板引擎。
uniq,mustUniq
生成一个删除所有重复项的新列表。
list 1 1 1 2 | uniq上面将生成 [1 2]
如果有问题,则 uniq 会产生 panic,而 mustUniq 会返回错误到模板引擎。
without,mustWithout
without 函数从列表中过滤掉项目。
without $myList 3上面将生成 [1 2 4 5]
without 可以使用多个过滤器:
without $myList 1 3 5这将生成 [2 4]
如果有问题,则 without 会产生 panic,而 mustWithout 会返回错误到模板引擎。
has,mustHas
测试列表是否具有特定元素。
has 4 $myList上述代码将返回 true,而 has "hello" $myList 将返回 false。
如果有问题,则 has 会产生 panic,而 mustHas 会返回错误到模板引擎。
compact,mustCompact
接受一个列表并删除其中的空值条目。
$list := list 1 "a" "foo" ""
$copy := compact $listcompact 将返回一个新列表,其中删除了空项(即“”)。
如果有问题,则 compact 会产生 panic,而 mustCompact 会返回错误到模板引擎。
slice,mustSlice
要获取列表的部分元素,请使用 slice list [n] [m]。它相当于 list[n:m]。
slice $myList返回[1 2 3 4 5]。它与myList[:]相同。slice $myList 3返回[4 5]。它与myList[3:]相同。slice $myList 1 3返回[2 3]。它与myList[1:3]相同。slice $myList 0 3返回[1 2 3]。它与myList[:3]相同。
如果有问题,则 slice 会产生 panic,而 mustSlice 会返回错误到模板引擎。
chunk
将列表分成给定大小的块,使用 chunk size list。这对于分页很有用。
chunk 3 (list 1 2 3 4 5 6 7 8)这将产生列表的列表 [ [ 1 2 3 ] [ 4 5 6 ] [ 7 8 ] ]。
列表内部的注意事项
在 Go 中,列表是作为 []interface{} 实现的。对于嵌入 Sprig 的 Go 开发人员,您可以将 []interface{} 项传递到模板上下文中,并能够在这些项上使用所有 list 函数。