gin框架中的渲染

各种数据格式的响应

json、结构体、XML、YAML类似于java的properties、ProtoBuf

点击查看代码
// json响应
func someJson(context *gin.Context) {
	context.JSON(http.StatusOK, gin.H{"status": "OK", "data": "someJson"})
}
// 结构体响应
func someStruct(context *gin.Context) {
	var msg struct{
		Name string
		Age int
	}
	msg.Name = "李四"
	msg.Age = 55
	context.JSON(http.StatusOK, &msg)
}
// xml响应
func someXml(context *gin.Context) {
	context.XML(200, gin.H{"status": "OK", "data": "someXml"})
}
/*
	<map>
		<data>someXml</data>
		<status>OK</status>
	</map>
*/
// yaml响应
func someYaml(context *gin.Context) {
	context.YAML(200, gin.H{"status": "OK", "data": "someYaml"})
}
/*
	data: someYaml
	status: OK
*/

// 5.protobuf格式,谷歌开发的高效存储读取的工具
// 数组?切片?如果自己构建一个传输格式,应该是什么格式?
func someProtoBuf(context *gin.Context) {
	// 定义数据
	reps := []int64{int64(1), int64(2)}
	label := "label"
	data := &protoexample.Test{
		Label: &label,
		Reps: reps,
	}
	context.ProtoBuf(200, data)
}

HTML模板渲染

gin支持加载HTML模板, 然后根据模板参数进行配置并返回相应的数据,本质上就是字符串替换
LoadHTMLGlob()方法可以加载模板文件

  • 路由加载模板目录
    router.LoadHTMLGlob("app/templates/*")
  • funcHandle处理模板的方法
func someHtml(context *gin.Context) {
	context.HTML(200, "index.html", gin.H{"title": "sankuan", "content": "三宽内容"})
}
  • index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{.title}}</title>
</head>
<body>
{{.content}}
</body>
</html>

templates目录下多目录加载方法

  • 路由加载模板目录 router.LoadHTMLGlob("app/templates/**/*")

  • funcHandle处理模板的方法

func someHtml(context *gin.Context) {
	context.HTML(200, "user/user.html", gin.H{"title": "sankuan", "content": "三宽内容"})
}
  • user/user.html代码
<!DOCTYPE html>
{{ define "user/user.html" }}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
哈哈哈{{.content}}
</body>
</html>
{{end}}

如果你想进行头尾分离就是下面这种写法了:

templates目录下多目录加载方法

  • 路由加载模板目录 router.LoadHTMLGlob("app/templates/**/*")

  • funcHandle处理模板的方法

func someHtml(context *gin.Context) {
	context.HTML(200, "user/index.html", gin.H{"title": "sankuan222", "content": "三宽内容222"})
}
  • user/index.html文件代码:
{{define "user/index.html"}}
    {{template "public/header" .}}
    abcd{{.content}}
    {{template "public/footer" .}}
{{end}}
  • public/header.html文件代码:
<!DOCTYPE html>
{{define "public/header"}}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{.title}}</title>
</head>
<body>
{{end}}
  • public/footer.html文件代码:
{{define "public/footer"}}
</body>
</html>
{{end}}

如果你需要引入静态文件需要定义一个静态文件目录

router.Static("/static", "./app/static")

posted @ 2021-12-09 16:24  专职  阅读(83)  评论(0编辑  收藏  举报