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")
gin框架中的渲染的更多相关文章
- 在gin框架中使用JWT
在gin框架中使用JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下. 什么 ...
- golang gin框架中实现一个简单的不是特别精确的秒级限流器
起因 看了两篇关于golang中限流器的帖子: Gin 开发实践:如何实现限流中间件 常用限流策略--漏桶与令牌桶介绍 我照着用,居然没效果-- 时间有限没有深究.这实在是一个很简单的功能,我的需求是 ...
- gin框架中请求路由组的使用
1. gin框架中可以使用路由组来实现对路由的分类 package main import "github.com/gin-gonic/gin" func main() { rou ...
- gin框架中的路由
基本路由 gin框架中采用的路由库是基于httrouter做的 地址为:https://github.com/julienschmidt/httprouter httprouter路由库 点击查看代码 ...
- 【解决了一个小问题】gin框架中出现如下错误:"[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 500"
POST到数据到一条gin框架的接口后,客户端收到400错误,并且返回了业务中返回的"decode json fail". 关键代码是: func report(c *gin.Co ...
- golang gin框架中实现大文件的流式上传
一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存.如果是个巨大的文件,则可能内存会爆掉:且,有的时候我们需要一边上传一边处理. 以下的代码实现了大文件流式 ...
- gin框架中中间件的编写与使用
概念 一个完整的系统可能包括鉴权认证.权限管理.安全检查.日志记录等多维度的系统支持. 中间件位与服务器和实际业务处理程序之间,其含义就相当于在请求和具体的业务处理逻辑之间增加某些操作,这种以额外增加 ...
- gin框架中的参数验证
结构体验证 用gin框架的数据验证,可以不用解析数据,减少if else,会简洁许多. 处理请求方法 func structValidator(context *gin.Context) { var ...
- gin框架中请求参数的绑定与多数据格式处理
package main import ( "fmt" "github.com/gin-gonic/gin" ) // gin框架提供给开发者表单实体绑定的功能 ...
随机推荐
- 1248 - Dice (III)
1248 - Dice (III) PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 32 MB Given ...
- Chapter 7 Confounding
目录 7.1 The structure of confounding Confounding and exchangeability Confounding and the backdoor cri ...
- AT-GAN: A Generative Attack Model for Adversarial Transferring on Generative Adversarial Nets
目录 概 主要内容 符号说明 Original Generator Transfer the Generator Wang X., He K., Guo C., Weinberger K., Hopc ...
- Python Revisited Day 09 (调试、测试与Profiling)
目录 9.1 调试 9.1.1 处理语法错误 9.1.2 处理运行时错误 9.1.3 科学的调试 9.2 单元测试 9.3 Profiling 9.1 调试 定期地进行备份是程序设计中地一个关键环节- ...
- Unity——卡通渲染实现
效果展示: 原模型: 一.简单分析 卡通渲染又叫非真实渲染(None-Physical Rendering-NPR),一般日漫里的卡通风格有几个特点: 1.人物有描边 2.有明显的阴影分界线,没有太平 ...
- 前端后端通信初步尝试(javascript - flask)
在某项目中,需要使用python flask做后端功能开发,web提供功能入口. 此时需要使用Ajax通信. 由于以前从未接触过网络传输,记录了一些基础知识. 资料参考<HTML5+CSS3+J ...
- AWS修改RDS时区
查看 RDS 当前时区 默认情况下,AWS 的 RDS 采用的是 UTC 时间.而我们地区一般位于东八区,因此我们本地的时间是 UTC+8. 连接到 RDS 上,查询当前实例的时区. show var ...
- MySQL删除数据库或表(DROP DATABASE/table语句)
DROP DATABASE [ IF EXISTS ] <数据库名> DROP table[ IF EXISTS ] <数据库表名> 语法说明如下: <数据库名>: ...
- js 模块化 -- export 时 一个默认和多个默认的写法
js文件 只有一个 food 类,一般写 export {food} 或者 export {food as default} 那么如果有多个呢? 这样 export {food, food2} 或者 ...
- js- float类型相减 出现无限小数的问题
6.3 -1.1 是不是应该等于5.2? 但是js 会导致得出 5.19999999999的结果 怎么办?可以先先乘100 后相减,然是用方法 舍入为最接近的整数,然后再除于100, Math.rou ...