В родных шаблонизаторах (text/template и html/template) нет функций подключения файлов, но есть возможность подключать другие шаблоны, добавленные, например, через
template.ParseFiles или
template.ParseGlob.
Для начала парсим все шаблоны из каталога templates/ :
funcs := template.FuncMap{
"SayHello": func(s string) string {
return "Hello"
},
}
t := template.Must(template.New("").Funcs(funcs).ParseGlob("templates/*.html"))
Дальше используем:
t.ExecuteTemplate(os.Stdout, "index.html", map[string]string{"title": "My site"})
А внутри index.html пишем:
{{template "login-form.html" .}}
В FuncMap так-же можно добавить еще какую-нибудь функцию GetFile, которая будет читать файл и отдавать его содержимое в шаблон без обработки шаблонизатором.
Но если использовать какой-нибудь gin-gonic, то все так:
r := gin.New()
r.LoadHTMLGlob("templates/*.html")
r.GET("/", func(c *gin.Context) {
c.HTML(200, "index.html", map[string]string{"title": "My site"})
})