Go Modèles avec logique personnalisée


Exemple

Dans cet exemple, une carte de fonction nommée funcMap est fournie au modèle via la méthode Funcs() , puis invoquée dans le modèle. Ici, la fonction increment() est utilisée pour contourner le manque de fonction inférieure ou égale dans le langage de modélisation. Notez dans la sortie comment le dernier élément de la collection est géré.

A - au début {{- ou end -}} est utilisé pour couper les espaces et peut être utilisé pour rendre le modèle plus lisible.

package main

import (
    "fmt"
    "os"
    "text/template"
)

var funcMap = template.FuncMap{
    "increment": increment,
}

func increment(x int) int {
    return x + 1
}

func main() {
    const (
        letter = `Dear {{with $names := .}}
        {{- range $i, $val := $names}}
            {{- if lt (increment $i) (len $names)}}
                {{- $val}}, {{else -}} and {{$val}}{{end}}
        {{- end}}{{end}}; How are you?`
    )

    tmpl, err := template.New("letter").Funcs(funcMap).Parse(letter)
    if err != nil {
        fmt.Println(err.Error())
    }

    tmpl.Execute(os.Stdout, []string{"Harry", "Jane", "Lisa", "George"})
}

Résulte en:

Dear Harry, Jane, Lisa, and George; How are you?