Construyendo aplicaciones Web con Go

Plantillas HTML

Servir HTML es una tarea importante para algunas aplicaciones web. Go cuenta con uno de mis lenguajes de plantilla favorito hasta la fecha. No por sus características, sino por su sencillez y marco de seguridad. Renderizar plantillas HTML es casi tan fácil como representar JSON usando el paquetenet/html/template de la biblioteca estándar.

Este es el código fuente para la prestación de plantillas HTML:

package main

import (
    "html/template"
    "net/http"
    "path"
)

type Libro struct {
    Título string
    Autor  string
}

func main() {
    http.HandleFunc("/", MuestraLibros)
    http.ListenAndServe(":8080", nil)
}

func MuestraLibros(w http.ResponseWriter, r *http.Request) {
    libro: = {Libro "Construyendo Aplicaciones Web con Go", "Jeremy Sáenz"}

    fp: = path.Join("plantillas", "index.html")
    plant, err: = template.ParseFiles(fp)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    if err := plant.Execute(w, libro); err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

La siguiente es la plantilla que usaremos. Se debe colocar en el fichero plantillas/index.html del directorio desde donde se ejecuta tu programa:

<html>
  <h1>{{.Título}}</h1>
  <h3>por {{.Autor}}</h3>
</html>

Ejercicios

  1. Mira la documentación de los paquetes text/template y html/template. Juega un poco con el lenguaje de plantillas para darte una idea de sus metas, fortalezas y debilidades.
  2. En el ejemplo procesamos el fichero en cada petición, lo cual puede ser un montón de sobrecarga afectando el rendimiento. Experimenta procesando los archivos al inicio de tu programa y ejecutalo en tu http.Handler (sugerencia: usa el método Copy() de html.Template).
  3. Experimenta procesando y utilizando varias plantillas.