html/template

import "log"
import "os"
import "html/template"
var tpl = `
Dear {{.Name}},
{{if .Attended}}
It was a pleasure to see you at the wedding.
{{- else}}
It is a shame you couldn't make it to the wedding.
{{- end}}
{{with .Gift -}}
Thank you for the lovely {{.}}.
{{end}}
Best wishes,
Josie
------------------------------------------------------
`
t := template.Must(template.New("tpl").Parse(tpl))
data := []struct {
	Name, Gift string
	Attended   bool
}{
	{"Aunt Mildred", "bone china tea set", true},
	{"Uncle John", "moleskin pants", false},
	{"Cousin Rodney", "", false},
}
for _, r := range data {
	err := t.Execute(os.Stdout, r)
	if err != nil {
		log.Println("executing template:", err)
	}
tpl}

> 
> Dear Aunt Mildred,
> 
> It was a pleasure to see you at the wedding.
> Thank you for the lovely bone china tea set.
> 
> Best wishes,
> Josie
> ------------------------------------------------------
> 
> Dear Uncle John,
> 
> It is a shame you couldn't make it to the wedding.
> Thank you for the lovely moleskin pants.
> 
> Best wishes,
> Josie
> ------------------------------------------------------
> 
> Dear Cousin Rodney,
> 
> It is a shame you couldn't make it to the wedding.
> 
> Best wishes,
> Josie
> ------------------------------------------------------

#Binary comparison operators (defined as functions):

  • eq - Returns the boolean truth of arg1 == arg2
  • ne - Returns the boolean truth of arg1 != arg2
  • lt - Returns the boolean truth of arg1 < arg2
  • le - Returns the boolean truth of arg1 <= arg2
  • gt - Returns the boolean truth of arg1 > arg2
  • ge - Returns the boolean truth of arg1 >= arg2
tpl  := `{{if or (gt .Hour 21) (le .Hour 7) }}Good Night{{else}}Good Other Time of the 24 hours{{end}}`
t := template.Must(template.New("tpl").Parse(tpl))

t.Execute(os.Stdout, struct{
    Hour    int 
}{4})

> Good Night

#Descreet Functions

  • and
  • not
  • or
tpl  := `{{if and .IsRed .IsRound}}{{.Name}}{{end}}`
t := template.Must(template.New("tpl").Parse(tpl))

t.Execute(os.Stdout, struct{
    Name    string 
    IsRed   bool
    IsRound bool
}{"Red Ball", true, true})

> Red Ball
tpl  := `{{if or .IsRed .IsRound}}{{.Name}}{{end}}`
t := template.Must(template.New("tpl").Parse(tpl))

t.Execute(os.Stdout, struct{
    Name    string 
    IsRed   bool
    IsRound bool
}{"Blue Ball", false, true})

> Blue Ball

#Other Functions

  • call
  • html
  • index
  • slice
  • js
  • len
  • print
  • printf
  • println
  • urlquery

#Range Over

tpl  := `{{range .}} - {{.Name}} 
{{end}}`
t := template.Must(template.New("tpl").Parse(tpl))

t.Execute(os.Stdout, []struct{
    Name    string
}{
    {"Pickachu"},
    {"Ratata"},
    {"Mr. Mime"},
})

> - Pickachu
> - Ratata
> - Mr. Mime

#Try

tpl  := `{{.Name}}`
t := template.Must(template.New("tpl").Parse(tpl))

t.Execute(os.Stdout, struct{
    Name    string
}{ "pickachu"})

> pickachu