php小編小新為您帶來一篇關于如何使用template.ParseFS函數解析embed.FS模板的指南。在使用Go語言開發項目時,我們經常會使用embed包來嵌入靜態文件,而template.ParseFS函數則可以幫助我們解析這些嵌入的模板文件。本文將詳細介紹template.ParseFS函數的使用方法,幫助您在開發過程中更加靈活地處理模板文件,提升項目的開發效率。讓我們一起來看看吧!
問題內容
我想解析同一個 template.Template
結構中的所有模板,但我不知道如何解析,而且它也給了我一個錯誤。我有下一個代碼:
package main import ( "embed" "html/template" "log" "os" ) //go:embed internal/web/views/* var viewsFS embed.FS func main() { tmpls, err := template.New("").ParseFS(viewsFS, "**/*.html") if err != nil { log.Fatal(err) // Debugging I finded out that the error is here so the code below is irrelevant } tmpls.ExecuteTemplate(os.Stdout, "pages/home", nil) }
登錄后復制
給我 ParseFS
方法的錯誤是下一個:
$ 2023/09/16 23:36:42 template: pattern matches no files: `**/*.html`
登錄后復制
我認為錯誤出在 ParseFS
方法的 patterns
參數中,我不知道。
我在 internal/web/views
目錄中有很多 html 文件,實際上該文件夾中的所有文件都是 html 文件,每個文件都有一個或多個 {{define}}
類型的模板。
如果有任何幫助,我將不勝感激,謝謝
解決方法
@Charlie-Tumahai 將此文檔(Go Package 官方網站)歸功于他Go 中的全局模式
因此,為了解析同一個 template.Template
結構中的所有模板,我必須執行以下操作:
package main import ( "embed" "html/template" "log" "os" ) //go:embed internal/web/views/* var viewsFS embed.FS func main() { tmpls, err := template.New(""). ParseFS(viewsFS, "internal/web/views/*/*.html", "internal/web/views/*/*/*.html", /* Add more `*` if you have templates that are more nested */ ) if err != nil { log.Fatal(err) } tmpls.ExecuteTemplate(os.Stdout, "pages/home", nil) }
登錄后復制
我所做的是更多地研究 Glob 模式并學習如何在 Go 中使用它,Go 中的 Glob 模式的制作方式與任何其他語言都不同。