各种数据格式的响应

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框架中的渲染的更多相关文章

  1. 在gin框架中使用JWT

    在gin框架中使用JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下. 什么 ...

  2. golang gin框架中实现一个简单的不是特别精确的秒级限流器

    起因 看了两篇关于golang中限流器的帖子: Gin 开发实践:如何实现限流中间件 常用限流策略--漏桶与令牌桶介绍 我照着用,居然没效果-- 时间有限没有深究.这实在是一个很简单的功能,我的需求是 ...

  3. gin框架中请求路由组的使用

    1. gin框架中可以使用路由组来实现对路由的分类 package main import "github.com/gin-gonic/gin" func main() { rou ...

  4. gin框架中的路由

    基本路由 gin框架中采用的路由库是基于httrouter做的 地址为:https://github.com/julienschmidt/httprouter httprouter路由库 点击查看代码 ...

  5. 【解决了一个小问题】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 ...

  6. golang gin框架中实现大文件的流式上传

    一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存.如果是个巨大的文件,则可能内存会爆掉:且,有的时候我们需要一边上传一边处理. 以下的代码实现了大文件流式 ...

  7. gin框架中中间件的编写与使用

    概念 一个完整的系统可能包括鉴权认证.权限管理.安全检查.日志记录等多维度的系统支持. 中间件位与服务器和实际业务处理程序之间,其含义就相当于在请求和具体的业务处理逻辑之间增加某些操作,这种以额外增加 ...

  8. gin框架中的参数验证

    结构体验证 用gin框架的数据验证,可以不用解析数据,减少if else,会简洁许多. 处理请求方法 func structValidator(context *gin.Context) { var ...

  9. gin框架中请求参数的绑定与多数据格式处理

    package main import ( "fmt" "github.com/gin-gonic/gin" ) // gin框架提供给开发者表单实体绑定的功能 ...

随机推荐

  1. 1248 - Dice (III)

    1248 - Dice (III)   PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 32 MB Given ...

  2. Chapter 7 Confounding

    目录 7.1 The structure of confounding Confounding and exchangeability Confounding and the backdoor cri ...

  3. 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 ...

  4. Python Revisited Day 09 (调试、测试与Profiling)

    目录 9.1 调试 9.1.1 处理语法错误 9.1.2 处理运行时错误 9.1.3 科学的调试 9.2 单元测试 9.3 Profiling 9.1 调试 定期地进行备份是程序设计中地一个关键环节- ...

  5. Unity——卡通渲染实现

    效果展示: 原模型: 一.简单分析 卡通渲染又叫非真实渲染(None-Physical Rendering-NPR),一般日漫里的卡通风格有几个特点: 1.人物有描边 2.有明显的阴影分界线,没有太平 ...

  6. 前端后端通信初步尝试(javascript - flask)

    在某项目中,需要使用python flask做后端功能开发,web提供功能入口. 此时需要使用Ajax通信. 由于以前从未接触过网络传输,记录了一些基础知识. 资料参考<HTML5+CSS3+J ...

  7. AWS修改RDS时区

    查看 RDS 当前时区 默认情况下,AWS 的 RDS 采用的是 UTC 时间.而我们地区一般位于东八区,因此我们本地的时间是 UTC+8. 连接到 RDS 上,查询当前实例的时区. show var ...

  8. MySQL删除数据库或表(DROP DATABASE/table语句)

    DROP DATABASE [ IF EXISTS ] <数据库名> DROP table[ IF EXISTS ] <数据库表名> 语法说明如下: <数据库名>: ...

  9. js 模块化 -- export 时 一个默认和多个默认的写法

    js文件 只有一个  food 类,一般写 export {food} 或者 export {food as default} 那么如果有多个呢? 这样 export {food, food2} 或者 ...

  10. js- float类型相减 出现无限小数的问题

    6.3 -1.1 是不是应该等于5.2? 但是js 会导致得出 5.19999999999的结果 怎么办?可以先先乘100 后相减,然是用方法 舍入为最接近的整数,然后再除于100, Math.rou ...