Gin 框架响应格式与 HTML 模板渲染完整实战教程
️ 标签GinGo语言响应格式模板渲染HTML模板FuncMap后端开发 简介本文基于实训内容全面讲解 Gin 框架JSON/XML/YAML 多种响应格式、HTML 模板渲染、自定义模板函数、模板嵌套布局从零上手可直接实战开发适合初学者、课程实训、CSDN 学习收藏。一、前言在 Gin 框架 Web 开发中接口开发离不开多种数据响应格式页面开发离不开HTML 模板渲染。 Gin 基于Context上下文封装了丰富的响应方法同时兼容 Go 原生html/template模板库支持模板加载、数据传递、自定义模板函数、模板布局嵌套等功能。本文完整覆盖以下知识点Gin 多种响应格式JSON、XML、YAML、字符串响应结构体、Map、数组三种方式返回 JSONHTML 模板加载、渲染、向模板传递数据自定义模板函数 FuncMap 注册与使用模板嵌套、布局页面继承实现常见思考题知识点解析二、实训环境准备开发环境操作系统Windows 10 / Windows 11Go 版本Go 1.23编辑器VS Code Go 扩展插件依赖Gin 框架安装 Gin 依赖go get github.com/gin-gonic/gin三、Gin 多种响应格式实战3.1 统一前置代码package main import github.com/gin-gonic/gin func main() { r : gin.Default() // 下方所有路由写在这里 r.Run(:8080) }3.2 JSON 响应三种实现方式1定义用户结构体type User struct { Name string json:name Age int json:age Email string json:email }2结构体方式返回 JSON适合规范接口、结构化数据返回// 结构体返回JSON r.GET(/json/struct, func(c *gin.Context) { c.JSON(200, User{ Name: 张三, Age: 25, Email: zhangsanexample.com, }) })3Map 方式返回 JSON适合临时构造不规则数据// Map方式返回JSON r.GET(/json/map, func(c *gin.Context) { c.JSON(200, gin.H{ goodsName: Gin教程, price: 99, stock: 100, }) })4数组 / 切片方式返回 JSON适合返回列表、用户数组// 数组方式返回JSON r.GET(/json/array, func(c *gin.Context) { userList : []User{ {Name: 张三, Age: 25, Email: zhangsanexample.com}, {Name: 李四, Age: 23, Email: lisiexample.com}, } c.JSON(200, userList) })3.3 XML 响应格式定义带 xml 标签的结构体type UserXML struct { Name string xml:name Age int xml:age Email string xml:email }编写路由r.GET(/xml, func(c *gin.Context) { c.XML(200, UserXML{ Name: 张三, Age: 25, Email: zhangsanexample.com, }) })3.4 YAML 响应格式r.GET(/yaml, func(c *gin.Context) { c.YAML(200, gin.H{ appName: Gin实训项目, version: v1.0, author: admin, }) })3.5 普通字符串响应r.GET(/string, func(c *gin.Context) { c.String(200, Hello Gin 响应格式演示) })四、Gin HTML 模板渲染实战4.1 项目目录结构project/ ├── main.go └── templates/ ├── index.html ├── user.html └── layout.html4.2 加载模板文件使用LoadHTMLGlob加载 templates 下所有模板func main() { r : gin.Default() // 加载templates目录下所有html模板 r.LoadHTMLGlob(templates/*) // 模板路由... r.Run(:8080) }4.3 首页模板渲染templates/index.html!DOCTYPE html html langzh-CN head meta charsetUTF-8 title{{.title}}/title /head body h1{{.title}}/h1 ul {{range .users}} li姓名{{.Name}}年龄{{.Age}}邮箱{{.Email}}/li {{end}} /ul /body /htmlGo 路由代码r.GET(/, func(c *gin.Context) { c.HTML(200, index.html, gin.H{ title: 用户管理页面, users: []User{ {Name: Zhang, Age: 25, Email: ztest.com}, {Name: Li, Age: 22, Email: ltest.com}, }, }) })4.4 个人信息模板渲染templates/user.html!DOCTYPE html html langzh-CN head meta charsetUTF-8 title用户详情/title /head body h2用户详情/h2 p姓名{{.Name}}/p p年龄{{.Age}}/p p邮箱{{.Email}}/p /body /html路由r.GET(/user, func(c *gin.Context) { c.HTML(200, user.html, User{ Name: 王五, Age: 28, Email: wangwutest.com, }) })五、自定义模板函数 FuncMap5.1 注册自定义模板函数支持时间格式化、字符串大写转换等自定义逻辑import ( strings text/template time )// 注册模板自定义函数 r.SetFuncMap(template.FuncMap{ // 时间格式化 formatDate: func(t time.Time) string { return t.Format(2006-01-02) }, // 转大写 upper: strings.ToUpper, })注意必须在 LoadHTMLGlob 之前注册 FuncMap5.2 模板中使用自定义函数p当前时间{{formatDate .nowTime}}/p p姓名大写{{upper .Name}}/p后端传值r.GET(/func, func(c *gin.Context) { c.HTML(200, user.html, gin.H{ Name: gin, nowTime: time.Now(), }) })六、模板嵌套与布局实现6.1 布局模板 layout.html定义公共头部和底部预留内容插槽!DOCTYPE html html langzh-CN head meta charsetUTF-8 title公共布局/title /head body header网站公共头部导航/header {{template content .}} footer网站公共底部版权信息/footer /body /html6.2 子页面继承布局在 index.html 中定义content区块{{define content}} h1首页主体内容/h1 p继承公共布局页面/p {{end}}访问路由即可自动嵌套公共布局实现页面复用。七、实训思考题答案1. c.JSON ()、c.IndentedJSON ()、c.SecureJSON () 区别c.JSON()普通 JSON 响应紧凑格式生产常用c.IndentedJSON()格式化缩进 JSON便于调试展示c.SecureJSON()安全 JSON自动过滤特殊字符防止 XSS 注入2. 客户端自动适配 JSON/XML通过获取请求头Accept判断客户端支持的格式动态调用c.JSON()或c.XML()返回对应数据。3. 模板防止 XSS 攻击Gohtml/template默认自动转义HTML 特殊字符会自动过滤恶意脚本无需手动处理禁止使用template.JS、template.HTML直接渲染用户输入内容。4. {{template}} 和 {{block}} 区别{{template}}引入外部模板固定渲染内容{{block}}定义可重写区块子模板可以覆盖默认内容更适合布局继承八、总结Gin 支持JSON、XML、YAML、String多种响应格式适配前后端交互各种场景。JSON 可通过结构体、Map、数组三种方式返回分别适合规范接口、临时数据、列表数据。使用LoadHTMLGlob加载模板c.HTML实现页面渲染并传递变量。通过SetFuncMap可以注册自定义模板函数实现时间格式化、字符串处理等扩展功能。利用{{template}}可实现模板嵌套与公共布局复用提升前端页面开发效率。理解三种 JSON 方法区别、XSS 防护、模板布局语法是 Gin 页面开发和接口开发的必备基础。版权声明本文为原创 Gin 框架响应格式与模板渲染实战教程基于实训项目整理知识点完整、代码可直接运行适合 CSDN 发布、课程实训、期末作业学习禁止未经授权转载、抄袭与搬运。