TOC

Golang text/template 的用法

基础示例

package main

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

func main() {
    tmpl01, _ := template.New("tmpl01").Parse("你好,{{ . }}")
    tmpl01.Execute(os.Stdout, "世界")

    fmt.Println()
    fmt.Println(strings.Repeat("=", 80))
    fmt.Println()

    type Message struct {
        Subject string
        Time    time.Time
        Source  string
        Body    string
    }
    // http://www.xinhuanet.com/politics/2020-02/08/c_1125546135.htm
    subject := "国家监察委员会调查组已抵达武汉"
    timeobj, _ := time.Parse("2006-01-02 15:04:05", "2020-02-08 13:49:38")
    source := "新华社“新华视点”微博"
    content := "中央纪委国家监委网站8日消息,国家监察委员会调查组已抵达武汉。经中央批准,国家监察委员会派出调查组赴湖北省武汉市,就群众反映的涉及李文亮医生的有关问题作全面调查。"
    tmpl02, _ := template.New("tmpl02").Parse(`{{ .Subject }}
Time: {{ .Time.Format "2006-01-02 15:04:05" }}
Source: {{ .Source }}

{{ .Body }}`)
    tmpl02.Execute(os.Stdout, Message{subject, timeobj, source, content})
}

语法说明

  1. 双花括号
{{ . }}  // 输出当前变量
{{ .Name }} // 输出当前变量的 Name 字段

{{/* 注释 */}}
{{- /* 注释(去掉前后空格与换行) */ -}}

{{ if ... }} A {{ end }}
{{ if ... }} A {{ else }} B {{ end }}
{{ if ... }} A {{ else if ... }} B {{ else }} C {{ end }}

{{ range ... }} A {{ end }}
{{ range ... }} A {{ else }} B {{ end }}
{{ range . -}} {{ . }} {{ end -}}
{{ range $key, $val := . -}} ... {{ end -}}
如果你有魔法,你可以看到一个评论框~