Ce face text/template.Must
template.Must(template.New("x").Parse(text)) returnează șablonul dacă err este nil și se oprește cu panică altfel. Este gândit pentru șabloanele scrise în cod sau livrate cu programul, parsate la pornire în variabile globale: o greșeală de sintaxă este o greșeală de programare și trebuie să oprească programul imediat, nu să apară la prima cerere.
Pentru șabloane venite de la utilizatori (de exemplu un șablon de e-mail editat din panoul de administrare), nu folosi Must: tratează eroarea și afișează-o.
Parametri
| Parametru | Descriere |
|---|---|
t |
Șablonul returnat de Parse, ParseFiles etc. |
err |
Eroarea returnată de aceeași funcție. |
Ce returnează
Șablonul t, dacă nu există eroare.
Exemple
Exemplul 1: Șablon global parsat la pornire
package main
import (
"os"
"text/template"
)
var facturaTpl = template.Must(template.New("factura").Parse(
"Factura {{.Nr}} | {{.Client}} | {{printf \"%.2f\" .Total}} lei\n"))
type Factura struct {
Nr string
Client string
Total float64
}
func main() {
facturaTpl.Execute(os.Stdout, Factura{"F-101", "Ana Pop", 249.9})
facturaTpl.Execute(os.Stdout, Factura{"F-102", "SC Exemplu SRL", 1180})
}
Rezultat
Factura F-101 | Ana Pop | 249.90 lei
Factura F-102 | SC Exemplu SRL | 1180.00 lei
Exemplul 2: Ce se întâmplă la o greșeală de sintaxă
Recuperăm panica doar ca să-i vedem mesajul; în mod normal programul s-ar opri.
package main
import (
"fmt"
"text/template"
)
func main() {
defer func() {
fmt.Println("Panică:", recover())
}()
template.Must(template.New("gresit").Parse("Salut {{.Nume"))
fmt.Println("Nu ajunge aici")
}
Rezultat
Panică: template: gresit:1: unclosed action
Greșeli frecvente
- Folosești
Mustpentru șabloane citite la fiecare cerere sau trimise de utilizatori: o greșeală oprește tot serverul.
Comenzi înrudite
text/template.New: Creează un șablon text cu un nume; Parse îi încarcă textul cu acțiuni {{…}} care vor fi completate din date.text/template.ParseFiles: Încarcă șabloane din fișiere; fiecare fișier devine un șablon numit după numele fișierului.text/template.Template.Execute: Completează șablonul cu datele date și scrie rezultatul într-un io.Writer (ecran, fișier, răspuns HTTP, buffer).