登录
首页 >  Golang >  Go问答

使用embed.FS中的模板,如何解析template.ParseFS函数

来源:stackoverflow

时间:2024-02-05 22:00:24 471浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《使用embed.FS中的模板,如何解析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}} 类型的模板。 p>

如果有任何帮助,我将不胜感激,谢谢


正确答案


@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 模式的制作方式与任何其他语言都不同。

到这里,我们也就讲完了《使用embed.FS中的模板,如何解析template.ParseFS函数》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>