Templates HTML
Servir HTML é um trabalho importante para algumas aplicações web. Go tem uma
das minhas linguagens de template preferidas. Não pelos features, mas pela
simplicidade e a segurança. Renderizar templates HTML é quase tão fácil
quanto renderizar JSON usando o pacote html/template
da biblioteca padrão.
Esse é o código de renderização de templates HTML:
package main
import (
"html/template"
"net/http"
"path"
)
type Book struct {
Title string
Author string
}
func main() {
http.HandleFunc("/", ShowBooks)
http.ListenAndServe(":8080", nil)
}
func ShowBooks(w http.ResponseWriter, r *http.Request) {
book := Book{"Building Web Apps with Go", "Jeremy Saenz"}
fp := path.Join("templates", "index.html")
tmpl, err := template.ParseFiles(fp)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if err := tmpl.Execute(w, book); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
Esse é o template que vamos usar. Ele deve ser colocado no arquivo
templates/index.html
no diretório que o seu programa está sendo
executado:
<html>
<h1>{{ .Title }}</h1>
<h3>por {{ .Author }}</h3>
</html>
Exercícios
- Leia a documentação dos pacotes
text/template
ehtml/template
. Brinque um pouco com a linguagem de template para ganhar uma noção dos objetivos dela, além dos seus pontos fortes e fracos. - No exemplo parseamos os arquivos em cada request, o que pode causar um impacto de performance. Experimente parsear os arquivos no começo do programa e executá-los no seu
http.Handler
(dica: use o métodoCopy()
dohtml.Template
). - Experimente parsear e usar múltiplos templates.