php小編小新為您帶來(lái)一篇關(guān)于如何使用template.ParseFS函數(shù)解析embed.FS模板的指南。在使用Go語(yǔ)言開(kāi)發(fā)項(xiàng)目時(shí),我們經(jīng)常會(huì)使用embed包來(lái)嵌入靜態(tài)文件,而template.ParseFS函數(shù)則可以幫助我們解析這些嵌入的模板文件。本文將詳細(xì)介紹template.ParseFS函數(shù)的使用方法,幫助您在開(kāi)發(fā)過(guò)程中更加靈活地處理模板文件,提升項(xiàng)目的開(kāi)發(fā)效率。讓我們一起來(lái)看看吧!
問(wèn)題內(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 模式的制作方式與任何其他語(yǔ)言都不同。






