Sí, es posible. A html.Template
es en realidad un conjunto de archivos de plantilla. Si ejecuta un bloque definido en este conjunto, tiene acceso a todos los demás bloques definidos en este conjunto.
Si crea un mapa de tales conjuntos de plantillas por su cuenta, tiene básicamente la misma flexibilidad que ofrece Jinja / Django. La única diferencia es que el paquete html / template no tiene acceso directo al sistema de archivos, por lo que debe analizar y componer las plantillas por su cuenta.
Considere el siguiente ejemplo con dos páginas diferentes ("index.html" y "other.html") que heredan de "base.html":
{{define "base"}}<html>
<head>{{template "head" .}}</head>
<body>{{template "body" .}}</body>
</html>{{end}}
{{define "head"}}<title>index</title>{{end}}
{{define "body"}}index{{end}}
{{define "head"}}<title>other</title>{{end}}
{{define "body"}}other{{end}}
Y el siguiente mapa de conjuntos de plantillas:
tmpl := make(map[string]*template.Template)
tmpl["index.html"] = template.Must(template.ParseFiles("index.html", "base.html"))
tmpl["other.html"] = template.Must(template.ParseFiles("other.html", "base.html"))
Ahora puede renderizar su página "index.html" llamando
tmpl["index.html"].Execute("base", data)
y puede representar su página "other.html" llamando
tmpl["other.html"].Execute("base", data)
Con algunos trucos (por ejemplo, una convención de nomenclatura coherente de sus archivos de plantilla), incluso es posible generar el tmpl
mapa automáticamente.