各种数据格式的响应

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. JAVA中Base64和byte数组(byte[]) 相互转换

    Base64转byte[] byte[] bytes = DatatypeConverter.parseBase64Binary("base64字符串"); byte[]转base ...

  2. Balancing Act(poj1655)

    Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12703   Accepted: 5403 De ...

  3. MongoDB基本介绍与安装(1)

    MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...

  4. [OpenCV]基于特征匹配的实时平面目标检测算法

    一直想基于传统图像匹配方式做一个融合Demo,也算是对上个阶段学习的一个总结. 由此,便采购了一个摄像头,在此基础上做了实时检测平面目标的特征匹配算法. 代码如下: # coding: utf-8 ' ...

  5. <数据结构>关键路径

    目录 AOV网和AOE网 AOV网 AOE网 定义 与AOV网的转化 AOE网中着重解决的两个问题 1.最长路径问题 2.关键活动问题 总结 最长路径 无正环的图 有向无环图的最短路径 其他情况 关键 ...

  6. Java实习生常规技术面试题每日十题Java基础(五)

    目录 1.启动一个线程是用run()还是start()? . 2.线程的基本状态以及状态之间的关系. 3.Set和List的区别,List和Map的区别? 4.同步方法.同步代码块区别? 5.描述Ja ...

  7. 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字“Hello Android”,并将应用程序的名称更改为“FirstApp”。

    需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字"Hello Android",并将应用程序的名称更改为"Firs ...

  8. 在quasar 注册全局filter

    A common use case for Quasar applications is to run code before the root Vue app instance is instant ...

  9. react中使用charles实现本地数据mock

    首先下载charles软件地址,更详细的使用方法都包含在操作文档里,包含汉化版补丁(下载后查看) 链接:https://pan.baidu.com/s/1Q5rMbcX0Wus7AwdGUWa-Wg ...

  10. vue中另一种路由写法

    一个项目中一级菜单是固定的,二级及其以下的菜单是动态的,直接根据文件夹结构写路由 import Vue from 'vue' import Router from 'vue-router' impor ...