text/template.Must în Go

Primește rezultatul lui Parse (șablon, eroare) și oprește programul cu panică dacă există eroare; pentru șabloane fixe.

Sintaxă
func Must(t *Template, err error) *Template

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 Must pentru ș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).