Sim, é possível. A html.Template
é na verdade um conjunto de arquivos de modelo. Se você executar um bloco definido neste conjunto, ele terá acesso a todos os outros blocos definidos neste conjunto.
Se você criar um mapa desses conjuntos de modelos por conta própria, terá basicamente a mesma flexibilidade que o Jinja / Django oferece. A única diferença é que o pacote html / template não tem acesso direto ao sistema de arquivos, então você precisa analisar e compor os modelos por conta própria.
Considere o seguinte exemplo com duas páginas diferentes ("index.html" e "other.html") que herdam 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}}
E o seguinte mapa de conjuntos de modelos:
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"))
Agora você pode renderizar sua página "index.html" chamando
tmpl["index.html"].Execute("base", data)
e você pode renderizar sua página "other.html" chamando
tmpl["other.html"].Execute("base", data)
Com alguns truques (por exemplo, uma convenção de nomenclatura consistente para seus arquivos de modelo), é até possível gerar o tmpl
mapa automaticamente.