Gin 框架默认封装了golang内置的html/template包用于处理html模版,如果你开发的是接口服务,不提供html页面可以跳过本章内容。
前置技术知识点:
- 模板引擎 - 点击Go模板引擎教程,学习完整的模板引擎语法。
1.返回html结果的例子
func main() {
// 初始化gin对象
router := gin.Default()
// 首先加载templates目录下面的所有模版文件,模版文件扩展名随意
router.LoadHTMLGlob("templates/*")
// 绑定一个url路由 /index
router.GET("/index", func(c *gin.Context) {
// 通过HTML函数返回html代码
// 第二个参数是模版文件名字
// 第三个参数是map类型,代表模版参数
// gin.H 是map[string]interface{}类型的别名
c.HTML(http.StatusOK, "index.html", gin.H{
"title": "Main website",
})
})
// 启动http服务,并且绑定在8080端口
router.Run(":8080")
}
模版代码
文件名:templates/index.html
<html>
<h1>
{{ .title }}
</h1>
</html>
2.处理模版子目录的情况
一般在项目中,因为有多个模块的模版文件,我们都会以多个子目录的方式来组织模版文件,上面的例子只能加载某个目录下面的模版文件,无法加载子目录的模版文件。
例子:
func main() {
router := gin.Default()
// 加载templates目录下面的所有模版文件,包括子目录
// **/* 代表所有子目录下的所有文件
router.LoadHTMLGlob("templates/**/*")
router.GET("/posts/index", func(c *gin.Context) {
// 子目录的模版文件,需要加上目录名,例如:posts/index.tmpl
c.HTML(http.StatusOK, "posts/index.tmpl", gin.H{
"title": "Posts",
})
})
router.GET("/users/index", func(c *gin.Context) {
// 子目录的模版文件,需要加上目录名,例如:users/index.tmpl
c.HTML(http.StatusOK, "users/index.tmpl", gin.H{
"title": "Users",
})
})
router.Run(":8080")
}
模版文件:templates/posts/index.tmpl
{{ define "posts/index.tmpl" }}
<html><h1>
{{ .title }}
</h1>
<p>Using posts/index.tmpl</p>
</html>
{{ end }}
模版文件:templates/users/index.tmpl
{{ define "users/index.tmpl" }}
<html><h1>
{{ .title }}
</h1>
<p>Using users/index.tmpl</p>
</html>
{{ end }}