Gin框架render包源码源码阅读
前情提要
gin 框架render包地址:https://github.com/gin-gonic/gin/blob/master/render/render.go
中文文档:https://gin-gonic.com/zh-cn/docs/examples/rendering/ 和英文文档:https://gin-gonic.com/docs/examples/rendering/
render_test.go:https://github.com/gin-gonic/gin/blob/master/render/render_test.go
朋友提的测试pr:https://github.com/gin-gonic/gin/pull/3525/commits/74a81ee4a0f07a579658d0346d1ac22ae27c2a02
我在copilot也提出过一些问题:https://copilot.microsoft.com/ 和google搜索:https://www.google.com/search?q=gin%20render%20json&ie=UTF-8#ip=1
快速上手
Gin框架的render包主要是用于HTML模板渲染的。在Gin中,你可以使用LoadHTMLGlob()
或者LoadHTMLFiles()
方法来加载模板文件。例如,以下是一个简单的示例,展示了如何在Gin中加载和渲染HTML模板:
1 |
|
当然可以。Gin框架的render包主要是用于HTML模板渲染的。在Gin中,你可以使用LoadHTMLGlob()
或者LoadHTMLFiles()
方法来加载模板文件。例如,以下是一个简单的示例,展示了如何在Gin中加载和渲染HTML模板:
1 |
|
在这个例子中,LoadHTMLGlob("templates/*")
会加载templates
目录下的所有模板文件。当访问/index
路由时,Gin会渲染index.tmpl
模板,并将其作为HTTP响应发送。
如果你想要使用不同目录下名称相同的模板,你可以使用LoadHTMLGlob("templates/**/*")
来实现。此外,Gin还允许你自定义模板渲染器和分隔符,以及添加自定义模板函数来扩展模板的功能。
render.go
1 |
|
这段代码是Gin框架中render
包的一部分,它定义了一个Render
接口和多个实现了该接口的类型。让我们逐一解释:
Render
接口:Render
接口定义了两个方法:Render
和WriteContentType
。Render
方法接受一个http.ResponseWriter
作为参数,并返回一个error
。它的作用是将数据以自定义的ContentType
写入响应中。WriteContentType
方法也接受一个http.ResponseWriter
作为参数,但不返回任何值。它的作用是写入自定义的ContentType
。
实现
Render
接口的类型:- 代码中列出了多个结构体,如
JSON
、IndentedJSON
、SecureJSON
等,它们都实现了Render
接口。 _ Render = JSON{}
这样的语句是类型断言,用来确保JSON
类型实现了Render
接口。如果JSON
没有实现Render
接口,编译器会报错。
- 代码中列出了多个结构体,如
writeContentType
函数:- 这个函数接受两个参数:
http.ResponseWriter
和一个字符串切片value
。 - 它首先获取响应的头部信息,然后检查
Content-Type
是否已设置。 - 如果没有设置,它会将
value
设置为Content-Type
的值。
- 这个函数接受两个参数:
这段代码的语义是提供一个统一的接口来渲染不同格式的响应内容,如JSON、XML、HTML等。通过实现Render
接口,Gin可以轻松地扩展支持更多的内容类型,同时保持代码的整洁和一致性。如果你有更具体的问题或需要进一步的解释,请随时告诉我!
render_test.go
这个TestRenderJSON
函数是一个单元测试,用于测试Gin框架中的JSON渲染功能。下面是对这个测试函数的详细解释:
1 |
|
这个测试主要验证了以下几点:
WriteContentType
方法能否正确地设置HTTP头部的Content-Type
为application/json; charset=utf-8
。Render
方法能否正确地将map数据渲染为JSON字符串,并且处理特殊字符(如"<b>"
被转义为"\\u003cb\\u003e"
)。Render
方法在执行过程中没有产生错误。
通过这个测试,我们可以确认JSON
类型的Render
方法能够正确地渲染数据并设置正确的Content-Type
。
XML/JSON/YAML/ProtoBuf 渲染
下面是来自Gin框架文档的实例代码,展示了如何使用 gin.Context
渲染 JSON、XML、YAML 和 ProtoBuf 响应。
1 |
|
参考资料
(1) Golang Gin 实战(十一)| HTML模板渲染 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/151818857.
(2) HTML 渲染 | Gin Web Framework. https://gin-gonic.com/zh-cn/docs/examples/html-rendering/.
(3) 部署 | 正文 |《Gin 框架中文文档 1.5》| Go 技术论坛. https://learnku.com/docs/gin-gonic/1.5/deployment/6155.
(4) undefined. http://localhost:8080/html.