返回 Template.ParseFiles() 方法.此方法从作为参数传递给它的文件中解析多个模板.从文件解析的模板将以文件名命名(没有文件夹,只有文件名),并将它们添加到方法指定的 t 模板的内部关联模板映射中接收器.已解析的模板将不会被追加.将为它们创建多个单独的 template.Template 值,但它们将被关联(以便它们可以相互引用,例如它们可以彼此包含).让我们看一个例子.假设我们有以下两个模板文件: a.html 是: 我是 和 b.html : 我是b. 和示例代码: t:= template.New("a.html")如果_,err:= t.ParseFiles("a.html","b.html");err!= nil {恐慌}如果err:= t.Execute(os.Stdout,nil);err!= nil {恐慌} 此示例创建一个名为 a.html 的新的空模板,然后解析2个文件: a.html 和 b.html .会有什么结果? t 将表示 a.html 模板,因为我们之前使用该特定名称创建了它.运行代码,输出将是: 我是 现在,如果我们将第一行更改为: t:= template.New("x.html") 其余部分保持不变,运行它,我们会看到类似的内容: panic:模板:"x.html"是不完整或空的模板 原因是 t 表示一个名为 x.html 的模板,但它是空的,因为我们没有将任何内容解析"入其中,而且解析的文件也与名称 x.html 不匹配.因此,尝试执行它会导致错误.现在,如果我们尝试执行其关联的命名模板之一: if err:= t.ExecuteTemplate(os.Stdout,"a.html",nil);err!= nil {恐慌} 成功,然后再次给出: 我是 What would it happen if I pass two or more files to Go Template's ParseFiles func?func (*Template) ParseFilesIt helps says:But I'm still not sure what would the differences be that affects the output, forMyTempl.ParseFiles(tf1)vs.MyTempl.ParseFiles(tf1, tf2)Will the content of tf2 be appended to that of tf1? 解决方案 First a little about the "template" concept:A template.Template value is "the representation of a parsed template". But the wording here is a little "imperfect". A template.Template value may be (and usually is) a collection of multiple, associated templates. template.Template has an unexported field:tmpl map[string]*Template // Map from name to defined templates.This tmpl field holds all other associated templates, templates that are visible to the template, and which can be referred to by their names.You can read more about this in this answer: Go template nameBack to the Template.ParseFiles() method. This method parses multiple templates from the files passed to it as parameters. The templates parsed form the files will be named after the file names (without folders, just the file name), and they will be added to the internal, associated templates map of the t template designated by the method receiver.The parsed templates will not be appended. Multiple, separate template.Template values will be created for them, but they will be associated (so they can refer to each other, e.g. they can include each other).Let's see an example. Let's assume we have these 2 template files:a.html is:I'm a.And b.html:I'm b.And an example code:t := template.New("a.html")if _, err := t.ParseFiles("a.html", "b.html"); err != nil { panic(err)}if err := t.Execute(os.Stdout, nil); err != nil { panic(err)}This example creates a new, empty template named a.html, then parses 2 files: a.html and b.html.What will be the result? t will denote the a.html template, because we created it prior with that specific name. Running the code, the output will be:I'm a.Now if we change the first line to:t := template.New("x.html")And leave the rest unchanged, running it we see something similar:panic: template: "x.html" is an incomplete or empty templateThe reason is that t denotes a template named x.html but it's empty, as we didn't parse anything "into" it, and the parsed files also didn't match the name x.html. So attempting to execute it results in an error.Now if we try to execute one of its associated, named template:if err := t.ExecuteTemplate(os.Stdout, "a.html", nil); err != nil { panic(err)}It succeeds, and again gives:I'm a. 这篇关于Go Template ParseFiles函数可解析多个文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 10-29 17:11