Так це можливо. html.Template
Фактично A - це набір файлів шаблонів. Якщо ви виконуєте визначений блок у цьому наборі, він має доступ до всіх інших блоків, визначених у цьому наборі.
Якщо ви створюєте карту таких наборів шаблонів самостійно, ви в основному маєте таку ж гнучкість, яку пропонує Jinja / Django. Єдина відмінність полягає в тому, що пакет html / template не має прямого доступу до файлової системи, тому вам доведеться розбирати та складати шаблони самостійно.
Розглянемо наступний приклад із двома різними сторінками ("index.html" та "other.html"), які обидва успадковуються від "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}}
І наступна карта наборів шаблонів:
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"))
Тепер ви можете відтворити свою сторінку "index.html", зателефонувавши
tmpl["index.html"].Execute("base", data)
і ви можете відтворити свою сторінку "other.html", зателефонувавши
tmpl["other.html"].Execute("base", data)
Завдяки деяким хитрощам (наприклад, узгодженим правилам іменування файлів шаблонів) можна навіть tmpl
автоматично згенерувати карту.