View on GitHub

sprig

Useful template functions for Go templates.

Lists and List Functions

Sprig provides a simple list type that can contain arbitrary sequential lists of data. This is similar to arrays or slices, but lists are designed to be used as immutable data types.

Create a list of integers:

$myList := list 1 2 3 4 5

The above creates a list of [1 2 3 4 5].

first, mustFirst

To get the head item on a list, use first.

first $myList returns 1

first panics if there is a problem while mustFirst returns an error to the template engine if there is a problem.

rest, mustRest

To get the tail of the list (everything but the first item), use rest.

rest $myList returns [2 3 4 5]

rest panics if there is a problem while mustRest returns an error to the template engine if there is a problem.

last, mustLast

To get the last item on a list, use last:

last $myList returns 5. This is roughly analogous to reversing a list and then calling first.

initial, mustInitial

This compliments last by returning all but the last element. initial $myList returns [1 2 3 4].

initial panics if there is a problem while mustInitial returns an error to the template engine if there is a problem.

append, mustAppend

Append a new item to an existing list, creating a new list.

$new = append $myList 6

The above would set $new to [1 2 3 4 5 6]. $myList would remain unaltered.

append panics if there is a problem while mustAppend returns an error to the template engine if there is a problem.

prepend, mustPrepend

Push an element onto the front of a list, creating a new list.

prepend $myList 0

The above would produce [0 1 2 3 4 5]. $myList would remain unaltered.

prepend panics if there is a problem while mustPrepend returns an error to the template engine if there is a problem.

concat

Concatenate arbitrary number of lists into one.

concat $myList ( list 6 7 ) ( list 8 )

The above would produce [1 2 3 4 5 6 7 8]. $myList would remain unaltered.

reverse, mustReverse

Produce a new list with the reversed elements of the given list.

reverse $myList

The above would generate the list [5 4 3 2 1].

reverse panics if there is a problem while mustReverse returns an error to the template engine if there is a problem.

uniq, mustUniq

Generate a list with all of the duplicates removed.

list 1 1 1 2 | uniq

The above would produce [1 2]

uniq panics if there is a problem while mustUniq returns an error to the template engine if there is a problem.

without, mustWithout

The without function filters items out of a list.

without $myList 3

The above would produce [1 2 4 5]

Without can take more than one filter:

without $myList 1 3 5

That would produce [2 4]

without panics if there is a problem while mustWithout returns an error to the template engine if there is a problem.

has, mustHas

Test to see if a list has a particular element.

has 4 $myList

The above would return true, while has "hello" $myList would return false.

has panics if there is a problem while mustHas returns an error to the template engine if there is a problem.

compact, mustCompact

Accepts a list and removes entries with empty values.

$list := list 1 "a" "foo" ""
$copy := compact $list

compact will return a new list with the empty (i.e., “”) item removed.

compact panics if there is a problem and mustCompact returns an error to the template engine if there is a problem.

slice, mustSlice

To get partial elements of a list, use slice list [n] [m]. It is equivalent of list[n:m].

slice panics if there is a problem while mustSlice returns an error to the template engine if there is a problem.

chunk

To split a list into chunks of given size, use chunk size list. This is useful for pagination.

chunk 3 (list 1 2 3 4 5 6 7 8)

This produces list of lists [ [ 1 2 3 ] [ 4 5 6 ] [ 7 8 ] ].

A Note on List Internals

A list is implemented in Go as a []interface{}. For Go developers embedding Sprig, you may pass []interface{} items into your template context and be able to use all of the list functions on those items.