php小編小新為您帶來一篇關(guān)于如何使用template.ParseFS函數(shù)解析embed.FS模板的指南。在使用Go語言開發(fā)項(xiàng)目時(shí),我們經(jīng)常會(huì)使用embed包來嵌入靜態(tài)文件,而template.ParseFS函數(shù)則可以幫助我們解析這些嵌入的模板文件。本文將詳細(xì)介紹template.ParseFS函數(shù)的使用方法,幫助您在開發(fā)過程中更加靈活地處理模板文件,提升項(xiàng)目的開發(fā)效率。讓我們一起來看看吧!
問題內(nèi)容
我想解析同一個(gè) template.Template
結(jié)構(gòu)中的所有模板,但我不知道如何解析,而且它也給了我一個(gè)錯(cuò)誤。我有下一個(gè)代碼:
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) }
登錄后復(fù)制
給我 ParseFS
方法的錯(cuò)誤是下一個(gè):
$ 2023/09/16 23:36:42 template: pattern matches no files: `**/*.html`
登錄后復(fù)制
我認(rèn)為錯(cuò)誤出在 ParseFS
方法的 patterns
參數(shù)中,我不知道。
我在 internal/web/views
目錄中有很多 html 文件,實(shí)際上該文件夾中的所有文件都是 html 文件,每個(gè)文件都有一個(gè)或多個(gè) {{define}}
類型的模板。
如果有任何幫助,我將不勝感激,謝謝
解決方法
@Charlie-Tumahai 將此文檔(Go Package 官方網(wǎng)站)歸功于他Go 中的全局模式
因此,為了解析同一個(gè) template.Template
結(jié)構(gòu)中的所有模板,我必須執(zhí)行以下操作:
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) }
登錄后復(fù)制
我所做的是更多地研究 Glob 模式并學(xué)習(xí)如何在 Go 中使用它,Go 中的 Glob 模式的制作方式與任何其他語言都不同。