error: template: "..." is an incomplete or empty template

Make sure the argument you pass to template.New is the base name of one of the files in the list you pass to ParseFiles.

One option is

files := t.files()
if len(files) > 0 {
    name := path.Base(files[0])
    tmpl, err := template.New(name).Funcs(funcMap).ParseFiles(files...)

ParseFiles documentation:

Since the templates created by ParseFiles are named by the base names of the argument files, t should usually have the name of one of the (base) names of the files.


I was having the same problem. I realized that

tmpl, err := template.New("").Funcs(funcMap).ParseFiles("fileName")

also works if you use it with

err := tpl.ExecuteTemplate(wr, "fileName", data)

If I use

err := tpl.Execute(wr, data)

then I should specify the template name in New():

tmpl, err := template.New("fileName").Funcs(funcMap).ParseFiles("fileName")