Nicolas Marshall
Nicolas Marshall

Reputation: 4444

Golang templates : how to define array in a variable?

What would be the correct syntax to define an array variable inside a go template ? (here a HTML template). Here's what I tried :

{{define "template"}}
    {{ $x:=[]int{0,1,2} }}{{$x[0]}}
{{end}}

The error log says : unexpected "[" in command

Thanks.

Upvotes: 19

Views: 34250

Answers (2)

Rhubarb
Rhubarb

Reputation: 35823

You can use the sprig library to help here (I'm using this for helm templates - which are go templates, but helm has sprig builtin)

$myList := list  0 1 2
$new = append $myList 3

From Sprig Lists

Upvotes: 8

seong
seong

Reputation: 1996

there is no built-in way to do what you want to achieve. See the arguments on what you can do with the arguments and the pipeline.

But you could easily define your own function to achieve your goal:

package main

import (
    "html/template"
    "os"
)

func main() {
tmpl := `
{{ $slice := mkSlice "a" 5 "b" }}
{{ range $slice }}
     {{ . }}
{{ end }}
`
    funcMap := map[string]interface{}{"mkSlice": mkSlice}
    t := template.New("demo").Funcs(template.FuncMap(funcMap))
    template.Must(t.Parse(tmpl))
    t.ExecuteTemplate(os.Stdout, "demo", nil)
}

func mkSlice(args ...interface{}) []interface{} {
    return args
}

Playground.

Upvotes: 20

Related Questions