15、Go Gin常见响应返回详解

一、各种数据格式的响应

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

package mainimport ("github.com/gin-gonic/gin""github.com/gin-gonic/gin/testdata/protoexample"
)// 多种响应方式
func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// 1.jsonr.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": "zhangsan"})})// 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(":8000")
}

2、JSON响应

  • http://localhost:8000/someJSON

{"message":"someJSON","status":200}

3、结构体响应

  • http://localhost:8000/someStruct

{"Name":"root","Message":"message","Number":123}

4、XML

  • http://localhost:8000/someXML

This XML file does not appear to have any style information associated with it. The document tree is shown below.<map><message>abc</message></map>

5、YAML响应

  • http://localhost:8000/someYAML

name: snail

二、重定向 

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()r.GET("/index", func(c *gin.Context) {//状态码为 30(永久重定向)c.Redirect(http.StatusMovedPermanently, "redirect-to-baidu")})// 定义一个路由,当访问这个路由时,会重定向到百度首页r.GET("/redirect-to-baidu", func(c *gin.Context) {// 百度首页的URLbaiduURL := "http://www.baidu.com"// 重定向到百度首页,状态码为 302(临时重定向)c.Redirect(http.StatusFound, baiduURL)})r.Run()
}

 三、同步异步

  • goroutine机制可以方便地实现异步处理

  • 另外,在启动新的goroutine时,不应该使用原始上下文,必须使用它的只读副本 

package mainimport ("github.com/gin-gonic/gin""log""time"
)func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// 1.同步r.GET("/long_sync", func(c *gin.Context) {time.Sleep(3 * time.Second)log.Println("同步执行:" + c.Request.URL.Path)c.JSON(200, gin.H{"message": "同步执行", "status": 200})})// 2.异步r.GET("/long_async", func(c *gin.Context) {// 异步处理,需要搞一个副本copyContext := c.Copy()go func() {time.Sleep(3 * time.Second)log.Println("异步执行:" + copyContext.Request.URL.Path)}()// 异步处理允许服务器在处理请求时,不必等待当前请求完成就可以响应。c.JSON(200, gin.H{"message": "异步执行", "status": 200})})r.Run(":8000")
}
使用 c.Next()

c.Next() 允许你继续执行中间件链中的下一个中间件,但不会结束当前的请求处理。这可以用来在中间件中执行一些异步操作,而不影响请求的继续处理。

package mainimport "github.com/gin-gonic/gin"func main() {router := gin.Default()router.Use(func(c *gin.Context) {// 执行一些异步操作go func() {// 异步任务}()c.Next() // 继续执行下一个中间件或处理函数})router.GET("/ping", func(c *gin.Context) {c.JSON(200, gin.H{"message": "pong"})})router.Run()
}
使用 c.Abort()

c.Abort() 用于立即结束当前的请求处理,并可以返回一个响应给客户端。这通常用于在中间件中检测到某些条件不满足时,提前结束请求处理。

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {router := gin.Default()router.Use(func(c *gin.Context) {if 1 > 0 { //中间件中检c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"error": "xxx无权限"})return}c.Next() // 如果条件满足,继续执行})router.GET("/ping", func(c *gin.Context) {c.JSON(200, gin.H{"message": "pong"})})router.Run()
}

 

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

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

相关文章

Linux中使用chmod命令修改文件和文件夹的权限

要使一个文件夹及其子文件夹中的文件不允许新建文件和改写文件&#xff0c;你可以使用chmod命令修改文件和文件夹的权限。在Linux中&#xff0c;chmod可以用来更改文件系统中文件和目录的访问权限。 对于你的需求&#xff0c;你可以先将文件夹及其子文件夹中所有内容设置为只读…

08.1.jenkins安装方法

安装 配置官方下载源 #配置jenkins源 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key下载jak、jenkins服务 #下载jdk11环境&#xff0c;并且配置yu…

R实验 非参数性检验

实验目的&#xff1a; 掌握列联表检验&#xff08;Pearson c2独立性检验&#xff09;&#xff0c;掌握Fisher精确独立性检验&#xff0c;初步掌握三维列联表条件独立性检验&#xff1b; 掌握三个相关性检验&#xff1a;Pearson相关性检验&#xff0c;Spearman秩相关检验&…

C++ | Leetcode C++题解之第110题平衡二叉树

题目&#xff1a; 题解&#xff1a; class Solution { public:int height(TreeNode* root) {if (root NULL) {return 0;}int leftHeight height(root->left);int rightHeight height(root->right);if (leftHeight -1 || rightHeight -1 || abs(leftHeight - rightH…

10.3.k8s的附加组件-图形化管理工具dashboard

目录 一、dashboard介绍 二、部署安装dashboard组件 1.下载dashboard本地文件 2.修改nodeport的端口范围 3.创建和查看dashboard 4.电脑浏览器访问测试 5.token登录方式登录dashboard 5.1.查看dashboard的token 5.2.继续查看用户token的secrets资源详细信息 5.3.复制…

【Linux】icmp_seq=1 Destination Host Unreachable

执行ping 命令提示&#xff1a;From 192.168.XX.XX icmp_seq1 Destination Host Unreachable 这个错误消息通常表示以下几种情况之一&#xff1a; 网络连接问题&#xff1a;目标主机可能没有连接到网络&#xff0c;或者网络中的某个路由器无法将数据包转发到目标主机。 目标主…

Kafka之【存储消息】

Kafka之【存储消息】

推荐算法教程(个人总结)

推荐算法是一类用于推荐系统的算法&#xff0c;通过分析用户行为和偏好&#xff0c;向用户推荐个性化的内容或产品。常见的推荐算法包括协同过滤&#xff08;Collaborative Filtering&#xff09;、基于内容的推荐&#xff08;Content-Based Filtering&#xff09;、矩阵分解&a…

Python库之Scrapy的高级用法深度解析

Python库之Scrapy的高级用法深度解析 引言 Scrapy是一个强大的Web爬虫框架&#xff0c;它提供了丰富的功能和灵活的扩展性&#xff0c;使得在Python中编写爬虫变得简单而高效。本文将深入探讨Scrapy的高级用法&#xff0c;帮助读者充分利用Scrapy的强大功能。 目录 引言Scr…

软考--软件设计师-刷题总结

一、数据结构 贪心算法 归并排序将问题先分解、再处理、再合并的方式采用了分治法的思想 分治法&#xff1a;将一个大问题分成若干个小问题 希尔排序&#xff1a; 定义一个 i 变量指向这一组的第二个数据&#xff0c;定义一个 j 变量指向 i - gap 的位置。 将 i 下标的值放到…

leetcode热题100.完全平方数(动态规划进阶)

前言 作者&#xff1a;晓宜 &#xff0c;大厂准入职小白 最近毕业论文快搞完了&#xff0c;打算把之前坚持的hot100系列文章更完&#xff0c;帮助大家更好的通过面试和笔试&#xff0c;都拿到大厂offer&#xff0c;大家快跟着刷起来呀。 从今天起立一个flag&#xff0c;每天更新…

那些网络安全上的事实,很多人不见得知道!

明月发现不少小白对网络安全的认知几乎为零&#xff0c;甚至明月还碰到一个说 VPN 能彻底隐匿自己的&#xff0c;至于现在这帮动不动就利用 DDos/CC 攻击被人网站来推销境外高防服务器、高防 CDN 的老鼠屎们更是网络安全知识白痴的水平&#xff0c;破坏和攻击的水平完全取决于能…

AI爆文写作:如何写出令人看一眼就想点击的爆款标题?

一、好标题要素(以公众号文章为例) 1. 热点、名人:热点事件、名人自带流量 董宇辉最新演讲刷屏:孩子未来20年的差距,是这样拉开的》 《读懂了杨绛,你就不再抱怨人生》 《江西彩礼38.8w上热搜:好的婚姻,不是侃价钱,而是看家庭》 2 悬疑:带着疑问,或反常识的观点,…

mac版本Phpstudy本地环境安装Discuz教程【2024】

此方法适用于m1版本的mac版本Phpstudy本地环境安装Discuz&#xff0c;当然同样使用更高版本的mac端。网上各种安装教程参差不齐&#xff0c;根本解决不了小白的入门需求&#xff0c;以下是最新且直接明了的安装教程。 Phpstudy本地环境安装Discuz教程&#xff1a; 1、安装Phps…

c++ vector实现出现的一些问题

目录 前言&#xff1a; 浅拷贝问题: typename指定类型&#xff1a; 前言&#xff1a; 最近学习了c vector的使用&#xff0c;然后也自己实现了一下vector的部分重要的功能。然后在其中出现了一些问题&#xff0c;在这就主要记录一下我解决哪些bug。 浅拷贝问题: 在实现res…

第四十三天 | 416.分割等和子集 1049.最后一块石头的重量|| 494.目标和

题目&#xff1a;416.分割等和子集 思路&#xff1a;只要找到集合里能够出现sum/2的子集总和&#xff0c;就算是可以分割成两个相同元素和子集了。 1.dp[j]含义&#xff1a;背包容量为j时&#xff0c;放进物品后&#xff0c;背的最大重量为dp[j] 那么如果背包容量为target&a…

分类网络中one-hot的作用

在分类任务中&#xff0c;使用神经网络时&#xff0c;通常需要将类别标签转换为一种合适的输入格式。这时候&#xff0c;one-hot编码&#xff08;one-hot encoding&#xff09;是一种常见且有效的方法。one-hot编码将类别标签表示为向量形式&#xff0c;其中只有一个元素为1&am…

2024年顶级算法-黑翅鸢优化算法(BKA)-详细原理(附matlab代码)

黑翅鸢是一种上半身蓝灰色&#xff0c;下半身白色的小型鸟类。它们的显著特征包括迁徙和捕食行为。它们以小型哺乳动物、爬行动物、鸟类和昆虫为食&#xff0c;具有很强的悬停能力&#xff0c;能够取得非凡的狩猎成功。受其狩猎技能和迁徙习惯的启发&#xff0c;该算法作者建立…

PS —— 精修图像

PS —— 精修图像 修复污点修复画笔工具修复画笔工具 美白滤镜去杂锐化加杂减淡和锐化工具 我觉得今天这篇博客&#xff0c;无论是男同胞还是女同胞&#xff0c;都要熟练掌握&#xff08;哈哈哈哈…) 今天我们来学习如何精修图像&#xff0c;精修图像一般分为几步——修复&…

面试准备【面试准备】

面试准备【面试准备】 前言面试准备自我介绍&#xff1a;项目介绍&#xff1a; 论坛项目功能总结数据库表设计注册功能登录功能显示登录信息功能发布帖子评论私信点赞功能关注功能通知搜索网站数据统计热帖排行缓存 论坛项目技术总结Http的无状态cookie和session的区别为什么要…