编程 templ:用 Go 语言写 HTML 的现代实践

2026-08-26 12:41:42 views 11

templ:用 Go 语言写 HTML 的现代实践

templ 是一个面向 Go 语言的原生模板引擎。它允许开发者直接用 Go 语法编写 HTML 用户界面,并在编译阶段将模板转换为纯 Go 代码。这意味着你可以在模板中自由使用 Go 的类型系统、控制结构和标准库,同时获得接近手写 Go 的性能。

对于构建 Web 应用、静态站点或微服务前端,templ 提供了一个类型安全、高性能且无需 JavaScript 的替代方案。

核心特性

  • 服务端渲染(SSR):模板在服务端执行,可部署为 Serverless Function、Docker 容器或标准 Go 程序。
  • 静态渲染:支持生成纯静态 HTML,预渲染页面,直接托管到 CDN 或对象存储。
  • 编译为 Go 代码.templ 文件在构建时生成 .go 代码,运行时零额外开销,类型安全在编译期即得到保证。
  • 完整的 Go 语言能力:模板内可调用任意 Go 函数,使用 ifswitchfor 等控制语句,访问标准库和第三方包。
  • 无 JavaScript 依赖:没有前后端分离带来的复杂度,更小的攻击面、更快的首屏加载,对 SEO 友好。
  • 优秀的开发体验:官方工具链提供 IDE 自动补全、语法高亮、类型检查,以及一键代码生成。

基本语法示例

templ 的语法非常接近 Go,只有少量新增的模板标记:

// 简单组件
package main

templ Greeting(name string) {
    <div>Hello, {name}!</div>
}

组件可以组合、复用,并支持条件渲染、循环和 switch:

templ UserList(users []User) {
    if len(users) == 0 {
        <p>No users found.</p>
    } else {
        <ul>
            for _, user := range users {
                <li>{user.Name}</li>
            }
        </ul>
    }
}

模板中的逻辑与普通 Go 代码一致,学习成本极低。

工作原理

编写 .templ 文件后,运行模板生成器:

templ generate

它会生成对应的 .go 文件。之后你只需要像编译普通 Go 程序一样 go buildgo run,即可启动应用。整个过程中没有任何运行时解析或模板引擎介入。

使用场景

  • Web 应用开发:适合需要快速迭代、类型安全、对性能敏感的服务端渲染场景。
  • 静态网站生成:通过静态渲染,可以快速构建博客、文档站等,部署成本极低。
  • 微服务架构:每个服务可独立输出 HTML 片段,与后端 API 灵活结合。

与其他方案对比

方案类型安全性能JavaScript 依赖学习成本
html/template部分(运行时检查)一般需学习特定模板语法
React / Vue强(前端作用域)受限于浏览器必须需掌握前端工程化体系
templ编译期强类型接近原生 Go只需会 Go

templ 最大的优势在于:它让 Go 开发者无需切换心智模型,就能写出类型安全、高性能的 HTML 界面。

快速开始

安装 templ 命令行工具:

go install github.com/a-h/templ/cmd/templ@latest

创建模板文件 hello.templ

package main

templ Hello(name string) {
    <h1>Hello, {name}!</h1>
}

生成 Go 代码:

templ generate

在 Go 程序中使用:

func main() {
    http.Handle("/", templ.Handler(Hello("World")))
    http.ListenAndServe(":8080", nil)
}

总结

templ 代表了 Go 语言 Web 开发的一种新方向:将模板编译为代码,让 HTML 的构建过程拥有与 Go 语言本身一样的安全性和性能。对于追求简洁架构、极致性能,且希望彻底摆脱 JavaScript 束缚的开发者来说,templ 是一个值得深入探索的选择。

参考资源

复制全文 生成海报 Go templ 模板引擎 HTML Web开发

推荐文章

程序员茄子在线接单