指定已解析模板的名称

I am trying to dynamically parse files using walk in a folder and I want to be able to set the path of the file "path/file.html". But my issue is if I have a file in a folder "path/folder/files.html" I can't do it because when I ExecuteTemplate the file name will be the same "files.html". Is it possible to name each template as I ParseFiles?

Im ok with doing a file one at a time if trying to do them all at once wont work.

// Parse file and send to responsewriter
func View(w http.ResponseWriter, path string) {
    temp, err := template.ParseFiles("application/views/"+path+".html")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    } else {
        temp.ExecuteTemplate(w, path, nil)
    }
}

Walk the filesystem using filepath.Walk and a consumer method that will create templates with the full file paths as names:

package main

import (
    "fmt"
    "html/template"
    "os"
    "path/filepath"
)

func consumer(p string, i os.FileInfo, e error) error {
    t := template.New(p)
    fmt.Println(t.Name())
    return nil
}

func main() {
    filepath.Walk("/path/to/template/root", filepath.WalkFunc(consumer))
}

You can try template.Lookup, the whole process looks like:

var (
   templates *template.Template 
)

func loadTemplate() {
    funcMap := template.FuncMap{        
        "safe":func(s string) template.HTML {
            return template.HTML(s)
        },
    }
    var err error
    templates, err = utils.BuildTemplate("/theme/path/", funcMap)
    if err != nil {
        log.Printf("Can't read template file %v,", err)
    }   
 }
func homeHandler(w http.ResponseWriter, r *http.Request) {  
        //lookup the theme your want to use
    templ = templates.Lookup("theme.html")
    err := templ.Execute(w, data)
    if err != nil {
        log.Println(err)
    }
 }

 func main() {
   loadTemplate()
 }

BuildTemplate looks like:

func BuildTemplate(dir string, funcMap template.FuncMap) (*template.Template, error) {
    fs, err := ioutil.ReadDir(dir)
    if err != nil {
        fmt.Printf("Can't read template folder: %s
", dir)
        return nil, err
    }
    files := make([]string, len(fs))
    for i, f := range (fs) {
        files[i] = path.Join(dir, f.Name())
    }
    return template.Must(template.New("Template").Funcs(funcMap).ParseFiles(files...)), nil
}