Check Go templates for validity.
Using CheckedTemplate[T]
:
t := template.Must(template.ParseFiles("index.tmpl"))
ct, err := templatecheck.NewChecked[IndexData](t)
if err != nil { ... }
// ct cannot have type errors.
data := IndexData{...}
...
// ct.Execute's second argument must be of type IndexData.
if err := ct.Execute(w, data); err != nil { ... }
Using CheckedTemplate[T]
is recommended, but may require changes
in how you write your templates and provide data to them.
For example, if your template contains
{{.F}}
you can execute it with any value that has an F
field or method.
Two different calls to Template.Execute
can pass in two different
types, as long as each has F
. With checked templates, you
must fix a single type to use for execution.
Using the CheckXXX
functions:
t := template.Must(template.ParseFiles("index.tmpl"))
if err := templatecheck.CheckHTML(t, homePage{}); err != nil {
log.Fatal(err)
}
See the package documentation for details.