Go 模板

发布: (2026年2月11日 GMT+8 20:23)
3 分钟阅读
原文: Dev.to

Source: Dev.to

什么是 Go 模板?

Go 模板是一种在 Go 中通过将数据与纯文本或 HTML 文件混合来创建动态内容的方式。它们允许你用 Go 代码提供的值替换模板中的占位符,从而轻松生成依赖用户输入或数据库内容的页面。

模板只是一个包含使用双大括号 {{ }} 编写的占位符的文件。例如,{{ .Name }} 会插入传递给模板的数据对象中的 Name 字段。点号 (.) 代表根数据对象。

定义数据结构

通常你会定义一个结构体(或 map)来保存想要显示的数据:

type PageData struct {
    Title   string
    Message string
}

模板文件示例

下面是一个简单的 HTML 模板,演示了 Go 模板的多个特性,如变量插值、条件语句和循环:

{{ .Title }}

## {{ .Title }}

{{ .Message }}

{{ if .IsLogged }}
    Welcome back, {{ .User }}!
{{ else }}
    Please login to continue.
{{ end }}

## Your Tasks:

{{ range .Tasks }}
    - {{ . }}
{{ else }}
    - No tasks available.
{{ end }}

在 Go 代码中使用模板

下面的 Go 程序解析上述模板文件,并使用 PageData 实例执行它:

package main

import (
    "html/template"
    "net/http"
)

type PageData struct {
    Title    string
    Message  string
    IsLogged bool
    User     string
    Tasks    []string
}

func handler(w http.ResponseWriter, r *http.Request) {
    data := PageData{
        Title:    "Go Templates Advanced Example",
        Message:  "Using conditions and loops in templates",
        IsLogged: true,
        User:     "Ian",
        Tasks: []string{
            "Learn Go templates",
            "Build a web app",
            "Practice Go daily",
        },
    }

    tmpl := template.Must(template.ParseFiles("index.html"))
    tmpl.Execute(w, data)
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

小结

Go 模板让你能够将表现层(HTML 或文本)与业务逻辑分离,使用不同的数据复用布局,并高效地构建动态网页、报告或任何基于文本的内容。它们支持基本的逻辑,如条件语句、循环和内置函数(例如 len),在保持代码简洁可维护的同时提供了灵活性。

0 浏览
Back to Blog

相关文章

阅读更多 »

你再也不能相信互联网了

markdown 这是一个 “byte” 帖子。它可能没有其他帖子那么详细。我喜欢奇怪且有点晦涩的事物。这是我的习惯,而且很多 t...