Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 485
Nicolas Marshall Avatar asked Jul 29 '14 09:07

Nicolas Marshall


2 Answers

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.

like image 142
seong Avatar answered Nov 20 '22 09:11

seong


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

like image 22
Rhubarb Avatar answered Nov 20 '22 08:11

Rhubarb