gin打包html模板和静态资源文件
[GIN-debug] [WARNING] Since SetHTMLTemplate() is NOT thread-safe. It should only be called
at initialization. ie. before any route is registered or the router is listening in a socket:

        router := gin.Default()
        router.SetHTMLTemplate(template) // << good place

GinEcho有点不一样,需要在注册路由之前注册模板

注册子目录的html文件

├── go.mod
├── go.sum
├── app.go
├── resources
│   ├── css
│   │   └── input.css
│   ├── js
│   │   └── tailwind.config.js
│   └── views
│       ├── detail.html
│       ├── home
│       │   └── home.index.html
│       └── search.html
func walkDir(fileSystem embed.FS, path string) {
	_, err := T.ParseFS(fileSystem, path+"/*.html")
	if err != nil {
		panic(fmt.Sprintf("parse error:%s", err.Error()))
	}
	entries, _ := fs.ReadDir(fileSystem, path)
	for _, entry := range entries {
		if entry.IsDir() {
			walkDir(fileSystem, path+"/"+entry.Name())
		}
	}
}

T:=template.New("view")
T.ParseFS(ResourcesFS, "resources/views/*.html")

entries, _ := ResourcesFS.ReadDir("resources/views")
for _, entry := range entries {
    if entry.IsDir() {
        walkDir(ResourcesFS, "resources/views/"+entry.Name())
    }
}