gin框架使用系列之四——json和protobuf的渲染

  • 系列目录
    • 《gin框架使用系列之一——快速启动和url分组》
    • 《gin框架使用系列之二——uri占位符和占位符变量的获取》
    • 《gin框架使用系列之三——获取表单数据》

  上篇我们介绍了如何获取数据,本篇我们介绍一下如何返回固定格式的数据。

一、返回JSON数据

在web开发中,我们最常用的数据传输格式就是json数据,其视前面的示例中我们都是返回的json数据,在这里我们再做一个总结,在gin中,我们使用c.JSON()函数来返回json数据,其中第一个参数是返回的状态码,第二个是具体的数据,在这里,我们并不需要将具体的对象转换成json然后再发出,只需要将对象传入即可,JSON()函数内部会帮我们转换好数据,

type Message struct {Msg    stringNumber intName   string
}
func main() {router := gin.Default()router.GET("/moreJSON", func(c *gin.Context) {msg := Message{Number: 12,Name:   "hong",Msg:    "测试返回json",}c.JSON(http.StatusOK, msg)})router.Run() // listen and serve on 0.0.0.0:8080
}

当在浏览器中输入url时,会返回正确的json数据
在这里插入图片描述

二、返回protoBuf数据

相对于json数据,数据传输的方式还有proto,这种数据结构更加紧凑,因此在网络要求比较严格的情况下,经常使用proto的数据格式进行数据的传输。proto的数据格式相关的内容,可以自行下来了解以下,我后续也会新增这方面的博客,本篇主要讲解数据在gin中的使用

  • 首先我们需要编写一个proto文件,新建一个Message.proto文件,内容如下
syntax = "proto3";option go_package = ".;proto";message MessageProto {string Msg = 1;int32 Number = 2;string Name = 3;
}
  • 然后在控制台找到编写的proto文件所在的目录,执行如下命令
 protoc --go_out=. --go-grpc_out=. Message.proto
  • 这样就会生成对应的Message.pb.go文件,然后编写如下的代码,返回proto数据
func main() {router := gin.Default()router.GET("/more_protoBuf", func(c *gin.Context) {msg := proto.MessageProto{Number: 55,Name:   "rouc",Msg:    "测试返回proto",}c.ProtoBuf(http.StatusOK, &msg)})router.Run() // listen and serve on 0.0.0.0:8080
}

启动项目后在浏览器输入对应的url,会返回proto格式的数据
在这里插入图片描述


后记
  个人总结,欢迎转载、评论、批评指正

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

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

相关文章

如何在临近期末考之前,保持一个良好的心态呢?

在临近期末考之前,保持一个良好的心态非常重要,因为这有助于你在考试中发挥出自己的最佳水平。以下是一些建议,帮助你保持冷静和专注: 制定计划:制定一个详细的学习计划,包括每天要复习的科目和内容。这样…

开源安全测试工具 | 网络安全工具列表

自动化渗透测试 • AttackSurfaceMapper (https://github.com/superhedgy/AttackSurfaceMapper) - 自动化渗透测试工具, 使用手册/测试流程 (https://www.uedbox.com/post/59110/)。 • vajra (https://github.com/r3curs1v3-pr0xy/vajra) - 自动化渗透测试. • Savior (https…

Linux管理LVM逻辑卷

目录 一、LVM逻辑卷介绍 1. 概述 2. LVM基本术语 2.1 PV(Physical Volume,物理卷) 2.2 VG (Volume Group,卷组) 2.3 LV (Logical Volume,逻辑卷) 3. 常用的磁盘命令 4. 查看系统信息的命…

golang第一卷---go入门

go入门 对于使用go的好处环境变量配置开发工具 参考网站 :go入门 对于使用go的好处 简单好记的关键词和语法。轻松上手,简单易学。更高的效率。比Java,C等拥有更高的编译速度,同时运行效率媲美C,同时开发效率非常高。…

爬虫工作量由小到大的思维转变---<第三十三章 Scrapy Redis 23年8月5日后会遇到的bug)>

前言: 收到回复评论说,按照我之前文章写的: 爬虫工作量由小到大的思维转变---<第三十一章 Scrapy Redis 初启动/conn说明书)>-CSDN博客 在启动scrapy-redis后,往redis丢入url网址的时候遇到: TypeError: ExecutionEngine.crawl() got an unexpected …

Conda简介及常用指令

Conda 是一个开源的包管理器和环境管理器,主要用于安装、运行和升级数据科学和机器学习等领域的软件包和依赖。Conda 可以用于多种语言,包括 Python、R、Ruby、Lua、Scala、Java、JavaScript、C/ C 等。 Conda 的主要特点 环境管理:Conda 允…

linux查看服务器内存

要查看服务器内存,可以使用以下命令: 使用 free 命令来查看服务器的内存使用情况: free -h该命令将显示内存使用情况的摘要,包括总内存、已使用内存、可用内存等信息。 使用 top 命令来实时监视内存使用情况: top在…

Qt GUI 优化方案详解

文章目录 一、引言二、应用启动优化2.1 懒加载概念1. **懒加载的应用场景:**2. **Qt中的懒加载方式:**3. **示例 - C++中的懒加载:**4. **示例 - QML中的懒加载:**2.2 异步加载1. **异步加载的应用场景:**2. **实现异步加载的方式:**3. **示例 - 使用Qt的异步网络请求:*…

数据资产专题3:估值

欢迎关注主页个人介绍及相关链接,获取更多算法源码材料 2023数据资源入表白皮书,推荐系统源码下载-CSDN博客 浅析研发支出费用化和资本化的区别-CSDN博客 商业银行数据资产估值白皮书,推荐系统源码下载-CSDN博客 用友BIP数据资产入表解决…

odoo17核心概念view4——view.js

这是view系列的第四篇文章,专门介绍View组件。 作为一个Component,它总共包含js、css、xml三个标准文件,当然最重要的是view.js 首先在setup函数中对传入的参数props做了各种校验,然后扩展了subenv useSubEnv({keepLast: new Kee…

2. SQL - 约束

1 主键约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录。 主键必须包含唯一的值。 主键列不能包含 NULL 值。 每个表都应该有一个主键,并且每个表只能有一个主键。 添加主键约束 创建表时,在字段描述处,声明指定字段为主键创建表时&…

PLC远程上下载物联网网关的功能

PLC远程上下载物联网网关的功能 设备远程监控:通过物联网网关,可以实时监控PLC设备的运行状态,获取设备的各种参数信息,以便及时发现和解决设备故障。 数据采集与传输:蓝蜂物联网PLC远程网关可以采集PLC设备的各种数据…

C++ --绪论

绪论 1.1 导学1.2 计算机系统简介1.3 计算机语言和程序设计方法的发展1.4 面向对象的基本概念1.5 程序的开发过程 计算机程序 程序是指令的集合 面向过程的语言:c语言 面向对象的语言:c、python、java 类继承多态 注释 // 两个相离最近的 /**/ 会结…

深度学习中的Epoch

深度学习中的Epoch 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一同探讨深度学习领域中不可或缺的概念之一——Epoch。 1. 什么是Epoch&…

pyDAL一个python的ORM(4) pyDAL查询操作

1 、简单查询 rows db(db.person.dept marketing).select(db.person.id, db.person.name, db.person.dept) rows db(db.person.dept marketing).select() rows db(db.person.dept marketing).select(db.person.ALL) rows db().select(db.person.ALL) / db(db.person).se…

飞企互联-FE企业运营管理平台 登录绕过漏洞复现

0x01 产品简介 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据、物联网、移动互联网等技术支撑的云工作台。这个平台可以连接人、链接端、联通内外,支持企业B2B、C2B与O2O等核心需求,为不同行业客户的互联网转型提供支持。 0x02 漏洞概…

医疗卫生行业网络安全需求发展

文章目录 一、行业安全建设需求分析1、等级保护2.0合规建设云计算技术大数据技术物联网技术移动互联网技术2、加强医疗数据安全保护加密存储与传输数据加强数据备份与恢复注重数据脱敏与分级保护3、强化网络安全制度管理完善应急预案与响应机制加强网络安全人员管理二、行业新技…

【12.28】转行小白历险记-刷算法04

01两两交换链表中的节点 整体思路 1.要修改后一个节点的指向一定要知道前一个节点的指向才可以改变后面一个节点的 2.分情况奇数和偶数节点,终止条件很重要 3.虚拟头节点,是对我们操作的指针是不是头节点进行判断 02删除链表的倒数第N个节点 思路 …

QT应用篇 二、QML用Image组件实现Progress Bar 的效果

QT应用篇 一、QT上位机串口编程 二、QML用Image组件实现Progress Bar 的效果 三、QML自定义显示SpinBox的加减按键图片及显示值效果 文章目录 QT应用篇前言一、qml需求二、使用组件1.Image组件2.Image中fillMode的使用例子 总结 前言 记录自己学习QML的一些小技巧方便日后查找…

前端使用高德api的AMap.Autocomplete无效,使用AMap.Autocomplete报错

今天需要一个坐标拾取器,需要一个输入框输入模糊地址能筛选的功能 查看官方文档,有一个api可以直接满足我们的需求 AMap.Autocomplete 上代码 AMapLoader.load({"key": "你的key", // 申请好的Web端开发者Key,首次调…