| 1234567891011121314151617181920212223242526272829 |
- // Package templates 提供 HTML 模板的处理功能
- package templates
- import (
- "net/http"
- "path/filepath"
- "sync"
- "text/template"
- )
- // TemplateHandler 负责处理 HTML 模板的渲染
- type TemplateHandler struct {
- once sync.Once // 确保模板只被解析一次
- Filename string // 模板文件名
- templ *template.Template // 解析后的模板对象
- }
- // ServeHTTP 处理 HTTP 请求并渲染模板
- // 实现了 http.Handler 接口
- func (t *TemplateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
- // 使用 sync.Once 确保模板只被解析一次,避免重复解析带来的性能开销
- t.once.Do(func() {
- // 解析模板文件,如果失败会 panic
- t.templ = template.Must(template.ParseFiles(filepath.Join("templates", t.Filename)))
- })
- // 执行模板渲染,将请求对象作为数据传递给模板
- t.templ.Execute(w, r)
- }
|