如何在Golang中使用模板渲染HTML


Golang使用html/template包渲染HTML,支持数据安全嵌入与XSS防护。1. 可通过Parse解析内联模板并传入结构体数据渲染;2. 常用ParseFiles加载外部HTML文件,便于维护;3. 支持模板复用,利用define和block实现布局继承;4. 自动HTML转义防止注入,可信内容可用template.HTML绕过转义。

如何在golang中使用模板渲染html

在Golang中使用模板渲染HTML,主要依赖标准库中的 html/template 包。它不仅能安全地将数据嵌入HTML,还能防止XSS攻击。下面介绍如何实际操作。

1. 基本HTML模板渲染

你可以定义一个简单的HTML模板字符串,然后用数据填充并输出到HTTP响应中。

package main

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

func handler(w http.ResponseWriter, r *http.Request) {
    t := template.Must(template.New("example").Parse(`
        <html>
        <body>
            <h1>Hello, {{.Name}}!</h1>
        </body>
        </html>
    `))

    data := struct{ Name string }{Name: "Alice"}
    t.Execute(w, data)
}

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

访问 http://localhost:8080 就能看到渲染后的页面。注意:{{.Name}} 是模板语法,用来插入结构体字段。

2. 使用外部HTML文件

更常见的是把HTML模板放在独立文件中,便于维护。

创建文件 templates/index.html

<!DOCTYPE html>
<html>
<head><title>Golang Template</title></head>
<body>
    <h2>Welcome, {{.Username}}</h2>
    <p>You h*e {{.MessageCount}} new messages.</p>
</body>
</html>

Go代码加载并渲染该文件:

func handler(w http.ResponseWriter, r *http.Request) {
    t, err := template.ParseFiles("templates/index.html")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    data := struct {
        Username      string
        MessageCount  int
    }{
        Username:     "Bob",
        MessageCount: 5,
    }

    t.Execute(w, data)
}

3. 模板复用:布局与块

对于多个页面共用头部和底部,可以使用模板继承。

创建 templates/layout.html

<html>
<head><title>{{block "title" .}}Default Title{{end}}</title></head>
<body>
    <header><h1>My Website</h1></header>
    <main>
        {{block "content" .}}<p>No content.</p>
                    <div class="aritcle_card">
                        <a class="aritcle_card_img" href="/ai/1401">
                            <img src="https://img.php.cn/upload/ai_manual/000/000/000/175680033362448.jpg" alt="标贝悦读AI配音">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/ai/1401">标贝悦读AI配音</a>
                            <p>在线文字转语音软件-专业的配音网站</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="标贝悦读AI配音">
                                <span>66</span>
                            </div>
                        </div>
                        <a href="/ai/1401" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="标贝悦读AI配音">
                        </a>
                    </div>
                {{end}}
    </main>
</body>
</html>

子模板 templates/home.html

{{define "title"}}Home Page{{end}}
{{define "content"}}
    <h2>Home</h2>
    <p>Welcome to the home page.</p>
{{end}}

Go代码:

func homeHandler(w http.ResponseWriter, r *http.Request) {
    tmpl := template.Must(template.ParseFiles(
        "templates/layout.html",
        "templates/home.html",
    ))
    tmpl.ExecuteTemplate(w, "layout", nil)
}

这样就能实现页面结构统一,内容按需替换。

4. 安全与转义说明

html/template 会自动对输出进行HTML转义,防止脚本注入。例如,如果数据包含 <script></script>,会被转为字符实体。

如果你确定某些内容是安全的HTML,可以用 template.HTML 类型绕过转义:

data := struct {
    Content template.HTML
}{
    Content: template.HTML("<strong>Safe HTML</strong>"),
}

但要谨慎使用,避免引入安全漏洞。

基本上就这些。Golang的模板系统简洁实用,适合构建动态网页或邮件内容。不复杂但容易忽略细节,比如路径、转义和嵌套结构。掌握好这些,就能高效渲染HTML。

以上就是如何在Golang中使用模板渲染HTML的详细内容,更多请关注其它相关文章!


# go  # 驿城区优化推广营销费用  # seo营销推广收录  # seo投放营销  # 机电产品推广的网站  # 你可以  # 放在  # 如果你  # 加载  # 的是  # 文件上传  # 复用  # 如何在  # 就能  # 数据结构  # 标准库  # html文件  # ai  # golang  # html  # 驷马桥网站推广  # 沈阳seo助手技巧  # wordpress网站seo设置  # 河源优化关键词排名  # 地级网站怎么推广  # 郴州网站推广方案 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画  《鹿路通》退余额方法  《深林》冬季章节图文攻略  React应用中Commerce.js数据加载与状态管理最佳实践  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  在Dash应用中自定义HTML标题和网站图标  Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案  如何编写一个符合 composer 规范的 post-install-cmd 脚本?  《东方财富》条件单关闭方法  《优志愿》修改手机号方法  《咸鱼之王》新版孙坚技能解析  mysql中如何分析索引使用情况_mysql索引使用分析方法  AO3中文入口稳定分享_AO3官网HTTPS看文详解  《花瓣》创建专辑方法  汽水音乐网页版登录 汽水音乐网页端官方入口  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  J*aScript实现下拉菜单驱动的动态表格数据展示  sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码  sublime如何自定义文件类型图标_AFileIcon插件的主题切换与个性化配置  深入理解Python对象引用与链表属性赋值  键盘测试软件哪个好_键盘故障检测工具推荐  青橙手机语音助手怎么唤醒_青橙手机语音助手设置与唤醒方法  动漫岛在线动漫网 动漫岛动漫在线观看官方入口  百度网盘如何设置上传限额  悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置  圆通快递包裹轨迹查询 圆通速递快件实时位置跟踪  HTML与J*aScript实现下拉菜单驱动的动态表格:构建交互式维修表单  如何高效地基于键列值映射DataFrame中的多个列  如何测试您的网站全球打开速度-网站海外测速工  使用Google服务账号实现Google Drive API无缝集成与文件访问  《下一站江湖2》风神腿获取攻略  优化CSS动画与J*aScript定时器协同:构建稳定Toast提示  盲鳗善于分泌黏液猜猜主要用来做什么  附近酒吧怎么找?  动漫之家观看全集库 动漫之家免费资源网地址  J*aScript实现网页表单实时输入字段比较与验证教程  《下一站江湖2》心法融合技巧  圆通快递官网入口查询单号 手机版官方查询入口  126邮箱网页在线登录2025_126邮箱网页版入口官方地址  Python定时发送QQ消息  照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程  CSS如何使用outline-offset与颜色组合突出元素边框  VS Code如何设置默认配置  传统曲艺莲花落的表演形式是  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制  厨房地面防滑垫的油污怎么洗? 机洗和手洗防滑垫的注意事项  多多买菜门店端app订单查看方法  MySQL多重关联查询:利用别名高效获取同一表的多个关联字段  个人所得税办理入口 个人所得税综合所得年度汇算入口  《三角洲行动》战斗步枪与机枪类改装代码分享 

 2025-11-12

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.