dire che ho un html/template
come la seguente:modo idiomatico per gestire gli errori di modello in golang
<html>
<body>
<p>{{SomeFunc .SomeData}}</p>
</body>
e talvolta SomeFunc
restituisce un errore. C'è un modo idiomatico per affrontare questo?
Se scrivo direttamente allo ResponseWriter
, è stato già scritto un codice di stato 200 prima che si verifichi l'errore.
var tmpl *template.Template
func Handler(w http.ResponseWriter, r *http.Request) {
err := tmpl.Execute(w, data)
// "<html><body><p>" has already been written...
// what to do with err?
}
Preferibilmente vorrei restituire un codice di stato 400 o qualcosa del genere, ma non riesco a vedere un modo per fare questo se uso template.Execute
direttamente sul ResponseWriter
. C'è qualcosa che mi manca?
I ** [scritto su questo] (http://elithrar.github.io/article/approximating-html-template-inheritance/) ** una mentre back-un pool di buffer tramite 'sync.Pool' o un altro costrutto-è un modo leggermente più performante per risolverlo. Assegnare un pool, ottenere un buffer, scrivere su di esso e poi sulla risposta (su errore nullo) e quindi rimettere il buffer nel pool. Altrimenti sei sul punto! – elithrar