gin的渲染

1 各种数据格式的响应

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

分别对所有数据格式举个列子

func main() {r := gin.Default()
​//1. json响应r.GET("/someJSON", func(c *gin.Context) {c.JSON(200,gin.H{"message":"someJSON","status":200})})//2. 结构体响应r.GET("/someStruct", func(c *gin.Context) {var msg struct{Name stringMessage stringNumber int}msg.Name = "root"msg.Message = "message"msg.Number = 123c.JSON(200,msg)})
​//3. XMLr.GET("/someXML", func(c *gin.Context) {c.XML(200,gin.H{"message":"abc"})})
​//4. YAML响应r.GET("/someYAML", func(c *gin.Context) {c.YAML(200,gin.H{"name":"you"})})
​//5.Protobuf格式,谷歌开发的高效存储读取的工具r.GET("/someProtoBuf", func(c *gin.Context) {reps := []int64{int64(1), int64(2)}//定义数据label := "label"//传protobuf格式数据data := &protoexample.Test{Label: &label,Reps: reps,}c.ProtoBuf(200,data)})
​r.Run(":8080")
}

分别在浏览器中输入以下内容,会得到具体的响应信息。

http://127.0.0.1:8080/someJSON

http://127.0.0.1:8080/someStruct

http://127.0.0.1:8080/someXML

http://127.0.0.1:8080/someYAML

http://127.0.0.1:8080/someProtoBuf

2 HTML模板渲染

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

举个最简单的例子:

把index.html放在view目录下,index.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{{.title}}</title>
</head>
<body>
name : {{.name}}
</body>
</html>

go代码:

package main
​
import ("github.com/gin-gonic/gin""net/http"
)
​
func main() {r := gin.Default()r.LoadHTMLGlob("view/*")r.GET("/index", func(c *gin.Context) {c.HTML(http.StatusOK, "index.html", gin.H{"title": "我是gin", "name": "you"})})r.Run()
}

效果如下:

如果view目录还有子文件夹,使用 r.LoadHTMLGlob("tem/**/*") 去加载html文件夹,然后使用c.HTML(xxx, "user/index.html",xx),渲染html模板。

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

文件结构:

header.html代码:

  {{define "public/header"}}<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>{{.title}}</title></head><body>{{end}}

footer.html代码:

  {{define "public/footer"}}</body></html>{{end}}

index.html代码:

  {{ define "user/index.html" }}{{template "public/header" .}}name: {{.name}}{{template "public/footer" .}}{{ end }}

go代码:

  func main() {r := gin.Default()r.LoadHTMLGlob("view/**/*")r.GET("/index", func(c *gin.Context) {c.HTML(http.StatusOK, "user/index.html", gin.H{"title": "我是gin", "name": "you1"})})r.Run()}

效果演示:

  • 如果你需要引入静态文件需要定义一个静态文件目录
    r.Static("/assets", "./assets")

3 重定向

package main
​
import ("net/http""github.com/gin-gonic/gin"
)
​
func main() {r := gin.Default()r.GET("/index", func(c *gin.Context) {c.Redirect(http.StatusMovedPermanently, "http://www.baidu.com")})r.Run()
}

4 同步异步

  • goroutine机制可以方便地实现异步处理
  • 另外,在启动新的goroutine时,不应该使用原始上下文,必须使用它的只读副本。
package main
​
import ("github.com/gin-gonic/gin""log""time"
)
func main() {r := gin.Default()//1. 异步r.GET("/long_async", func(c *gin.Context) {//需要搞一个副本copyContext := c.Copy()//异步处理go func() {time.Sleep(3 * time.Second)log.Println("异步执行:" + copyContext.Request.URL.Path)}()})
​//2. 同步r.GET("/long_sync", func(c *gin.Context) {time.Sleep(3 * time.Second)log.Println("同步执行:" + c.Request.URL.Path)})r.Run()
}

gin context和官方context_Go语言gin框架从入门到精通(3)相关推荐

  1. gin context和官方context_Go Web 小技巧(一)简化Gin接口代码

    不知道大家在使用 Gin 构建 API 服务时有没有这样的问题: 参数绑定的环节可不可以自动处理? 错误可不可以直接返回,不想写空 return, 漏写就是 bug 本文通过简单地封装,利用 go 的 ...

  2. 学习C语言,要从入门到精通

    1.学习C语言,要从入门到精通,需要读哪些书(从简单的到难的排序,越详细越好,最好都能注释下选择这本书的理由)?  入门阶段:还是老谭那本.  ..理由:虽然不能说它写得有多好,但是你现在要做的是入门 ...

  3. R语言—90分钟从入门到精通

    R语言-90分钟从入门到精通 1. 初识R 1.1 安装R 1.2 R编辑器-Rstudio安装 1.3 更换镜像/安装包/帮助文档 1.3.1 更换镜像 1.3.2 安装包 1.3.3 查看帮助文档 ...

  4. 视频教程-Spring框架快速入门到精通-Java

    Spring框架快速入门到精通 十年项目开发经验,主要从事java相关的开发,熟悉各种mvc开发框架. 王振伟 ¥18.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 ...

  5. gin context和官方context_Gin框架系列01:极速上手

    Gin是什么? Gin是Go语言编写的web框架,具备中间件.崩溃处理.JSON验证.内置渲染等多种功能. 准备工作 本系列演示所有代码都在Github中,感兴趣的同学可以自行查阅,欢迎大家一起完善. ...

  6. gin context和官方context_[系列文章] Gin框架 - 安装和路由配置

    概述 看下 Gin 框架的官方介绍: Gin 是一个用 Go (Golang) 编写的 web 框架. 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httprouter,速 ...

  7. gin context和官方context_gin 源码阅读(二) 路由和路由组

    " 上一篇讲的是gin 框架的启动原理,今天来讲一下 gin 路由的实现. 1 用法 还是老样子,先从使用方式开始: func main() { r := gin.Default() r.G ...

  8. gin context和官方context_gin 源码阅读(一) -- 启动

    文章首发于同名公众号,欢迎关注~ 因为 gin 的安装教程已经到处都有了,所以这里省略如何安装, 建议直接去 github 官方地址的 README 中浏览安装步骤,顺便了解 gin 框架的功能.ht ...

  9. hyperf框架的入门到精通

    hrperf框架的入门 前言 数据库配置 (读写分离) 创建表 增加 删除 查询 路由 注解路由 route文件的路由 hyperf的依赖注入 注入方式 通过构造方法注入 通过@inject注解注入 ...

最新文章

  1. 最常拿来面试的算法与数据结构,不是递归,不是动态规划,看下这
  2. springDatasolr 排序
  3. Swift3.0语言教程字符串与URL的数据转换与自由转换
  4. 装修行业难互联网化?利润不合理并非本质,体制才是
  5. java按钮改变窗口大小_布局似乎有问题,JButton在调整窗口大小时显示出意外的行为。...
  6. 大神把可视化放进数据地图里,原来不敲代码一样能做
  7. JSF和Facelets的lifecircle
  8. LeetCode 72 编辑距离
  9. 用AtomicStampedReference/AtomicMarkableReference解决ABA问题
  10. java使用itext7生成pdf
  11. 一维优化黄金分割法c语言程序,机械优化设计黄金分割法.doc
  12. java:布局方法(边界布局)
  13. python 爬取句子迷,多好的一个网站(哭~~)
  14. Day4-STM32的中断与通信——百问网7天物联网智能家居
  15. 服务器的型号规格,云服务器规格型号
  16. HEVC中低复杂度量化技术
  17. [转]网易新闻客户端为什么开始在北京市区的地铁、公交站牌大批量投放广告?...
  18. ValueError: With n_samples=0, test_size=0.15 and train_size=None, the resulting train set will be em
  19. ppt中讲演模式在哪里_滚动讲演的过去和现在
  20. 某小众CMS漏洞挖掘与实战

热门文章

  1. 求1+2!+3!+......+20!的和
  2. labview linux 内核 不匹配,Linux CentOS7(或Ubuntu)中安装NI-VISA后一打开范例Simple Serial.vi就闪退,LabVIEW就崩溃。...
  3. python集合操作班级干部竞选演讲稿_精选竞选班干部的演讲稿集合7篇
  4. 线程锁定CPU linux,linux 线程与CPU绑定
  5. 【Python】Paramiko模块在Windows10中import ssl报错的处理方法
  6. import win32com.client在python中报错及其解决办法
  7. Java中线程池,你真的会用吗?
  8. [转]Angular2 使用管道Pipe以及自定义管道格式数据
  9. new malloc
  10. 鼠标移动或者鼠标点击div消失不见排查