为 Go 量身打造的 HTML 模板语言
类似 JSX 的声明式组件语法,直接编译为原生无反射的流式 Go 函数,附带开箱即用的专业 LSP 语言服务器。
开始探索工坊
$
go install github.com/a-h/templ/cmd/templ@latest
card.templ
提示: 鼠标悬停在关键字上查看真实 LSP 浮窗
1234567891011121314
func Header(name string, count int) templ.Component
Header 生成类型安全的高性能导航状态条组件。在编译期验证所有参数类型,零反射直接输出缓冲字节流。
初始版本与代码生成 (Root & Codegen)
阶段入口
→
↓
版本与生成代码就绪,进入二进制构建与代码规范闭环
二进制构建与代码校验 (Build & Verify)
双路验证
主执行程序
→
代码纯净校验
→
↓
编译与一致性检查通过,启动全套测试与覆盖率质检
质量体系与测试覆盖率 (GOCOVERDIR 矩阵)
核心质量门禁
回归测试与插桩覆盖率
→
→
专项极限验证与代码规范
↓
质检全部达标,准许打包多平台快照、推送版本与发布文档
发布部署与多端文档 (Release & Docs)
终态交付
跨平台发布链
→
官方文档生态
→
构建与版本
⚪ 就绪
version-set
前置输入依赖 (Upstream):
无前置依赖 (流水线根任务)
下游解锁任务 (Downstream):
任务功能说明:
将 templ 的版本设置为当前版本。
README 执行命令定义
bash
version set --template="0.3.%d"
单核每秒渲染吞吐 (Ops / sec)
6.7x 倍速
templ (原生编译流)
1,842,910 ops/s
html/template (标准库反射)
274,800 ops/s
templ 吞吐量是标准库的 6.7 倍,大幅降低高并发负载下的 CPU 使用率与云端算力成本。
单次调用堆内存分配 (Allocations / op)
零逃逸 0-Alloc
templ (零反射缓冲切片)
0 - 1 allocs/op
html/template (AST 动态重构)
16 allocs/op
零堆内存逃逸。从源头上消除 Go 垃圾回收 (GC Stop-the-world) 导致的偶发尾延迟 (p99 latency)。
双语言混合上下文感知
在编写 HTML 标签或属性时,键入 { } 插槽即刻唤出全功能 Go 变量与函数自动补全,LSP 实时无缝双向切换。
符号重构与编译诊断
在普通 Go 文件中修改结构体或函数签名,所有 .templ 引用处同步更新,错误即时下划线标红。
自动化格式化 (templ fmt)
配合编辑器保存时自动触发 templ fmt,严格对齐 HTML 与 Go 混合缩进,杜绝全团队格式争论。
BUILT FOR GO DEVELOPERS
专为现代 Go 团队工程效率打造
摒弃传统模板语言的脆弱与黑盒体验,提供如同编写普通 Go 代码般严密的静态保障与速度。
编译期绝对类型安全
JSX 风格语法深度集成 Go 类型系统。组件入参、条件分支与循环完全静态推导,杜绝运行时空指针和字段拼写隐患。
templ UserBadge(u User) {
<span>{ u.Name }</span>
}
<span>{ u.Name }</span>
}
零运行时反射与极速流式写入
直接将组件编译为原生 Go 函数与缓冲字节流。无需动态 AST 解析与反射分发,单核渲染压测性能提升高达 10 倍。
0-alloc
单次渲染堆内存分配
开箱即用的独立 LSP 语言服务
官方支持 VS Code、Neovim 与主流开发工具。提供即时补全、悬浮签名、跨文件符号跳转以及保存时自动 templ fmt。
LSP: templ-lsp v2 · Ready
README.MD SPECIFICATION
官方 17 项全流程工程任务库
完整涵盖开发构建、覆盖率分析、代码格式化、质量检查及发版的全部 17 个标准化命令
| 任务标识 | 分类 | 作用说明 | 核心执行命令 | 操作 |
|---|
5 分钟快速上手指南
只需 4 步即可将类型安全的 HTML 组件接入标准 Go HTTP 服务
安装命令行工具
通过 Go 官方包管理器拉取最新 templ CLI:
go install github.com/a-h/templ/cmd/templ@latest
编写组件模板
新建 page.templ,编写强类型组件声明:
templ Hello(name string) {
<h1>你好,{ name }</h1>
}
自动生成 Go 代码
运行 generate 命令,或开启实时热更新监视:
templ generate --watch
挂载 HTTP 路由
利用 templ.Handler 注册至标准 net/http 路由器:
http.Handle("/", templ.Handler(Hello("世界")))