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框架提供给开发者表单实体绑定的功能 ...
随机推荐
- 使用docker自定义oraclejdk启动jar包
Dockerfile文件 FROM centos:7 #把java与tomcat添加到容器中 ADD jdk-8u161-linux-x64.tar.gz /usr/local/ #安装 vim编辑器 ...
- C++代码优化之nim_duilib控件关联
前言 使用nim_duilib关联控件,优化后.的确减少了代码量,那么,执行效率呢? 时间执行的长短与硬件.软件有关,以下内容仅为参考. 测试代码 下面的代码,分为两部分, 循环使用for,非循环则直 ...
- c++关于使用new的纠正
自己之前纠正过这个问题,但还是忘了.今天再拿出来. 今天主要总结关于使用 c++ 标准中的 new 关键字. [结论] A.处理new可能抛出的异常 B.针对new使用std::nothrow不抛出异 ...
- 【LeetCode】1160. Find Words That Can Be Formed by Characters 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典统计 日期 题目地址:https://leetco ...
- 【LeetCode】744. Find Smallest Letter Greater Than Target 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 线性扫描 二分查找 日期 题目地址:https:// ...
- 【LeetCode】677. Map Sum Pairs 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 前缀树 日期 题目地址:https://lee ...
- Adversarially Robust Generalization Requires More Data
目录 概 主要内容 高斯模型 upper bound lower bound 伯努利模型 upper bound lower bound Schmidt L, Santurkar S, Tsipras ...
- Spring企业级程序设计作业目录(作业笔记)
Spring企业级程序设计 • [目录] 第1章 Spring之旅 >>> 1.1.6 使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打 ...
- 前端在线学习网站W3School
W3School在线学习网站 http://www.w3school.com.cn/ W3School是因特网上最大的WEB开发者资源,是完全免费的,是非营利性的, 一直在升级和更新,是W3C中国社区 ...
- MongoDB应用场景及选型
1. MongoDB数据库定位 * OLTP数据库 * 原则上Oracle和MySQL能做得事情,MongoDB都能做(包括ACID事务) * 优点:横向扩展能力,数据量或并发量增加时候可以自动扩展 ...