当前位置: 首页 > 面试题库 >

是否有必要将模板放入地图中以便在Go中重复使用?

井疏珂
2023-03-14
问题内容

为了处理Web应用程序中的每个请求,有关模板的普通代码如下所示:

t:= template.New("welcome")
t, _ = t.ParseFiles("welcome.tpl")
t.Execute(w, data)

我想ParseFiles每次都花很多钱。是否可以重复使用模板?因此,我对此进行了改进:

//templateMap := make(map[string][template])
//...
tplName :="welcome"
t := templateMap[tplName]
if t=nil{
    t:= template.New(tplName )
    t, _ = t.ParseFiles("welcome.tpl")
    templateMap[tplName] = t
}

t.Execute(w, data)

我想知道通过将模板放入地图或缓存来提高效率是否可行或可行?我也想知道函数 Execute是否是线程安全的?

func (t *Template) Execute(wr io.Writer, data interface{}) (err error)


问题答案:

模板本身实际上可以充当模板的映射。这是我的工作:

我声明一个全局模板变量:

var t = template.New("master")

除了用作其他模板的容器之外,我实际上没有使用“主”模板。

然后,在我的应用启动时加载所有模板:

func init() {
    _, err := t.ParseGlob("templates/*.html")
    if err != nil {
        log.Fatalln("Error loading templates:", err)
    }
}

然后,当我想使用其中一个模板时,请按名称要求:

t.ExecuteTemplate(w, "user.html", data)


 类似资料:
  • 正如标题所述。转义数字输入是标准程序/做法吗? 我知道文本字段应该转义,但我想知道是否需要转义数字。

  • 问题内容: 在我拥有的一个小程序(尤其是cgo调用)上,go build和go run非常慢。我想缓存二进制文件,以便仅在源文件较新时才重建。我会使用带有%规则的简单Makefile,但是语言设计人员声称go的构建支持不需要Makefile。 我还有其他选择吗?go社区是否愿意使用另一个构建系统(可能是基于哈希的构建系统)来缓存和重用构建产品? 问题答案: 我写了一个工具来解决这个问题。单独不会检

  • 问题内容: 我想在我的html代码中的复选框和单选框的背景上放置一个图像,但是它不起作用,但是可以在其他表单属性上起作用。 问题答案: 我找到了如何使用纯CSS 将图像提供给 复选框 和 单选 按钮的方法。 HTML CSS

  • 对于不改变实例状态的函数,方法的javadoc注释通常与Java-API中@return-tag的注释相同或非常相似。 boolean Collection.IsEmpty() 如果此集合不包含元素,则返回true。 如果此集合不包含元素,则返回:true 现在我正在为许多简单的方法编写javadoc,比如getExpression(),在这些方法中我遇到了同样的问题。我应该像在API中那样做还是

  • 我这里有一个清单: 对不起,我不应该解析整数,所以代码应该是这样的:

  • 问题内容: 有必要避免内存泄漏吗? 问题答案: 不,在这种情况下不需要。并且不会被保留,因此没有强大的保留周期的风险。