具有自定义逻辑的模板

在此示例中,名为 funcMap 的函数映射通过 Funcs() 方法提供给模板,然后在模板内调用。这里,函数 increment() 用于解决模板语言中缺少小于或等于函数的问题。请注意输出中如何处理集合中的最终项目。

{{- 或 end -}} 开头的 - 用于修剪空白,可用于帮助使模板更清晰。

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"})
}

结果是:

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