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

7673bc5732296cda7fcfbbf41c918909.png

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()
}

效果如下:

05f1b57e14c5f964b3ab199917e78d16.png

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

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

文件结构:

779dabcde0fe524d577f114d3271525a.png

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()}

效果演示:

da8beb737282b8e8959df44855e6d8ee.png
  • 如果你需要引入静态文件需要定义一个静态文件目录
    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()
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cas .net 重定向循环_接口测试平台接入企业cas(一)

cas系统简介提供运营系统的 SSO 和 access control功能。类似百度的UC。CAS 是 Yale 大学发起的一个开源项目&#xff0c;旨在为 Web 应用系统提供一种可靠的单点登录方法&#xff0c;CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。官方网站&#xff1a;https://www.apereo…

虚拟机安装rsync服务器配置,虚拟机安装rsync服务器配置

虚拟机安装rsync服务器配置 内容精选换一换在分布式HA部署场景下&#xff0c;ASCS主备节点通过共享盘实现数据同步。本章节指导用户将ASCS主节点的数据盘绑定给ASCS备节点并为ASCS主备节点绑定浮动IP。已在SAP ASCS主备节点之间进行过相互的SSH跳转操作。绑定共享盘创建浮动IP并…

程序包android.support.annotation不存在_efcore技巧贴也许有你不知道的使用技巧

前言.net 环境近些年也算是稳步发展。在开发的过程中&#xff0c;与数据库打交道是必不可少的。早期的开发者都是DbHelper一撸到底&#xff0c;到现在的各种各样的ORM框架大行其道。孰优孰劣谁也说不清楚&#xff0c;文无第一武无第二说的就是这个理。没有什么最好的&#xff0…

centos系统云服务器,Centos系统怎么进云服务器

Centos系统怎么进云服务器 内容精选换一换CentOS 7.5版本操作系统的弹性云服务器默认关闭SELinux功能。通过/etc/selinux/config开启SELinux功能后&#xff0c;在输入密码时&#xff0c;会出现无法登录的问题。如果业务需要开启SELinux 功能&#xff0c;请参照本节内容进行配置…

applicationproperties不是小叶子_为何“砂糖桔”是带着叶子出售?原来其中有着“猫腻”,涨知识了...

大家好&#xff0c;我是你们的好朋友童童&#xff0c;生活中不止有眼前的苟且&#xff0c;还有诗和梦想。童童每天都给大家分享有趣实用的小知识&#xff0c;有什么意见或者建议都可以和童童交流&#xff0c;喜欢我们的可以关注呦。一起和童童来看看今天的小知识吧。随着春节的…

用android制作一个记事本app_用扁平化呈现一个天气APP

作为当下最火的设计风格之一&#xff0c;扁平化设计其实是一种简约的Ul 设计理念&#xff0c;现被广泛应用于图形用户界面上&#xff0c;在图形材料&#xff0c;例如海报&#xff0c;艺术作品&#xff0c;指导文档&#xff0c;各类出版物等方面尤为常用。今天为大家带来了我最近…

hbase hdfs外部表_硬核干货长文!Hbase来了解一下不?

本文公众号来源&#xff1a;互联网侦察 作者&#xff1a;channingbreeze最近我也在入门大数据相关的基础&#xff0c;这篇文章非常通俗易懂讲解了什么是Hbase&#xff0c;推荐阅读&#xff01;等我学所成&#xff0c;我也来写写大数据相关的入门知识。今天&#xff0c;小史的…

springboot自动配置的原理_SpringBoot实战:详解SpringBoot自动配置原理

SpringBoot 自动配置主要通过 EnableAutoConfiguration, Conditional, EnableConfigurationProperties 或者 ConfigurationProperties 等几个注解来进行自动配置完成的。EnableAutoConfiguration 开启自动配置&#xff0c;主要作用就是调用 Spring-Core 包里的 loadFactoryName…

PYTHON之路(八)

http://www.cnblogs.com/alex3714/articles/5227251.htmlSocket语法及相关socket概念A network socket is an endpoint of a connection across a computer network. Today, most communication between computers is based on the Internet Protocol; therefore most network …

kafka消息消费有延迟_RabbitMQ与Kafka的技术差异以及使用注意点

导言作为一个有丰富经验的微服务系统架构师&#xff0c;经常有人问我&#xff0c;“应该选择RabbitMQ还是Kafka&#xff1f;”。基于某些原因&#xff0c; 许多开发者会把这两种技术当做等价的来看待。的确&#xff0c;在一些案例场景下选择RabbitMQ还是Kafka没什么差别&#x…

android 通知_Android 全局消息通知框架实现(类似EventBus)

Github项目地址 https://github.com/532268948/MessageDemo一、介绍随着页面的增多&#xff0c;页面之间的信息交流也会越来越多&#xff0c;比如一个社交类app,你在个人中心修改了自己的个人信息&#xff0c;在动态展示页面你就要通知该页面有关于自己的动态需要更新自己展示在…

2019运管取消了滴滴还查吗_劳务资质2019年取消吗?劳务资质新标准你真的了解吗?...

施工劳务资质2019新标准&#xff01;劳务资质已经取消&#xff1f;不可能&#xff01;虽然这样对于很多企业来说应该比较省事&#xff0c;劳务资质也是越来越受欢迎的&#xff0c;但是企业在办理资质之前一定要将资质标准了解清楚了&#xff0c;新版施工劳务资质仅仅是将专业进…

FFmpeg获取DirectShow设备数据(摄像头,录屏)

这两天研究了FFmpeg获取DirectShow设备数据的方法&#xff0c;在此简单记录一下以作备忘。本文所述的方法主要是对应Windows平台的。 1. 列设备 ffmpeg -list_devices true -f dshow -i dummy命令执行后输出的结果如下&#xff08;注&#xff1a;中文的设备会出现乱码的情…

矩阵的对数运算公式_必修一——对数与对数运算

一、前言(废话)高中数学我们已经学习了二次函数&#xff0c;指数函数(如果不记得的读者可以往前面翻看一下)&#xff0c;这次作者为读者们讲解的是对数与对数运算&#xff0c;对数是什么呢&#xff1f;读者们心里有自己的认知吗&#xff1f;二、对数对数函数是高中阶段学习的一…

分拣外观残缺的机器人_复合机器人AGV+协作机器人的应用领域

什么是复合机器人?复合型机器人是一种集成AGV移动机器人和通用工业机器人两项功能为一身的机器人。在工业领域&#xff0c;通用工业机器人被称为机械臂或者机械手&#xff0c;主要是替代人胳膊的抓取功能;而AGV移动机器人是替代人腿脚的行走功能。复合型机器人则是手脚并用&am…

前端之旅,做一点有回报的事情

本文是参加前端早读课【同说】做的分享 首先感谢情封对前端圈的辛苦付出&#xff0c;能坚持做好一件事真的很不容易&#xff0c;敬佩这份精神。2天前看到早读课的【同说】活动计划&#xff0c;我觉得想法真的很好&#xff0c;忽然情封微信邀请我参与&#xff0c;听到后我是心虚…

差异表达基因变化倍数_10.limma教程|差异表达统计相关理论

点击上方“蓝字”关注我们10.1 Top-Tables 简介limma包提供topTable和decideTests函数概括线性模型结果&#xff0c;进行假设检验&#xff0c;调整p值进行多重检验。结果包括(log2)倍数变化&#xff0c;标准误差&#xff0c;t统计和p值。用于显著性分析的基本统计量是修正t统计…

activemq中怎么知道推送消息是否成功_如何优雅的使用activeMQ 安装、应用、安全认证、持久化...

ActiveMQ安装1. 下载资源ActiveMQ官网&#xff1a;版本说明ActiveMQ5.10.x以上版本必须使用JDK1.8才能正常使用。ActiveMQ5.9.x及以下版本使用JDK1.7即可正常使用。上传至Linux服务器解压安装文件tar -zxf apache-activemq-5.9.0-bin.tar.gz检查权限ls -al apache-activemq-5.9…

DB2表结构DDL脚本导出

db2look是导出DDL语句脚本的命令&#xff0c;以下是对db2look的一个简单介绍。 语法&#xff1a;db2look -d <数据库名> -e -t <表名> -o <文件名>.dml -d&#xff1a;数据库名&#xff0c;这必须指定。 -e:抽取复制数据所需要的DDL文件&#xff0c;此项将生…

套装门安装_室内套装门-油漆工艺

上一期我们分享了套装门的分类和区别&#xff0c;主要从门芯和门皮的结构&#xff0c;主要分为纯实木门、实木复合门、模压门三种。也分享了三种类型的门的区别和基本定义&#xff0c;其中最为关键的是实木复合门&#xff0c;四层结构&#xff0c;其中门芯的填充料可操作空间很…