package views import ( "embed" "html/template" "log" "net/http" ) //go:embed *.html var tmplFS embed.FS func New() *Views { templates := template.Must(template.New("").ParseFS(tmplFS, "*.html")) return &Views{ templates: templates, } } type Views struct { templates *template.Template } func (v *Views) Renderer(name string) func(w http.ResponseWriter, r *http.Request, data any) { tmpl := template.Must(v.templates.Clone()) tmpl = template.Must(tmpl.ParseFS(tmplFS, name)) return func(w http.ResponseWriter, r *http.Request, data any) { err := tmpl.ExecuteTemplate(w, "layout.html", data) if err != nil { w.WriteHeader(500) log.Print(err) } } }