首页 GolangGin实战-ProtoBuf使用和源码分析原理实现

GolangGin实战-ProtoBuf使用和源码分析原理实现

举报
开通vip

GolangGin实战-ProtoBuf使用和源码分析原理实现     GolangGin实战-ProtoBuf使用和源码分析原理实现                  ProtoBuf最近几年也算比较流行,它是一种语言无关,平台无关,并且可以扩展,并结构数据序列化的方法。相比JSON/XML这类文本格式的,ProtoBuf是二进制的,更快更高效。对于这么好的特性,Gin当然是支持的。通过这篇文章你可以学到:ProtoBuf数据结构ProtoBuf对象如何生成Golang代码Gin服务端如何序列化ProtoBuf输出Go客户端如何反序列化ProtoBufGin关于ProtoB...

GolangGin实战-ProtoBuf使用和源码分析原理实现
     GolangGin实战-ProtoBuf使用和源码 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 原理实现                  ProtoBuf最近几年也算比较流行,它是一种语言无关,平台无关,并且可以扩展,并结构数据序列化的方法。相比JSON/XML这类文本格式的,ProtoBuf是二进制的,更快更高效。对于这么好的特性,Gin当然是支持的。通过这篇文章你可以学到:ProtoBuf数据结构ProtoBuf对象如何生成Golang代码Gin服务端如何序列化ProtoBuf输出Go客户端如何反序列化ProtoBufGin关于ProtoBuf的源代码分析原理实现GinRender机制分析Gin如何优雅的面向接口编程ProtoBuf数据结构ProtoBuf的数据结构都是通过.proto文件进行定义的,然后再通过ProtoBuf工具生成相应平台语言的类库,这样就可以被我们使用了。1234567891011//这是protobuf的版本syntax="proto3";//定义包名packagemodule;//定义数据结构,message类似golang中的structmessageUser{stringname=1;//定义一个string类型的字段name,序号为1int32age=2;//定义一个int32类型的字段age,序号为2}这就是一个比较简单的ProtoBuf数据结构定义了,和我们在Golang里定义Struct差不多。生成Golang代码有了ProtoBuf结构数据,我们就可以生成对应的Golang代码了。首先呢,你要安装protoc编译器,通过这个https://github.com/protocolbuffers/protobuf/releases地址下载,选择适合自己操作系统的版本。下载后要把二进制protoc放在自己的$PATH/bin目录中,确保可以在终端执行。其次呢,因为ProtoBuf本身不支持GO语言,所以我们还得安装一个生成Golang代码的插件。安装方式也非常简单,通过如下代码即可:goget-ugithub.com/golang/protobuf/protoc-gen-go现在我们在终端下cd到我们存放user.proto文件的目录,执行如下代码即可生成对应的Golang代码protoc--go_out=.user.proto--go_out=. 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示输出Golang代码文件到当前目录下,生成的文件名是user.pb.go,规则就是filename.pb.go。生成的代码大家可以看一下,对于我们这么一个简单的User结构,生成的代码量还是很大的,这里截取一些,剩下的大家自己生成后看一下。12345678//定义数据结构,message类似golang中的structtypeUserstruct{Namestring`protobuf:"bytes,1,opt,name=name,proto3"json:"name,omitempty"`Ageint32`protobuf:"varint,2,opt,name=age,proto3"json:"age,omitempty"`XXX_NoUnkeyedLiteralstruct{}`json:"-"`XXX_unrecognized[]byte`json:"-"`XXX_sizecacheint32`json:"-"`}对应的关键核心User对象。在Gin中使用ProtoBuf有了ProtoBuf对应的Golang代码,我们就可以在Gin使用了。123456789101112funcmain(){r:=gin.Default()r.GET("/protobuf",func(c*gin.Context){data:=&module.User{Name:"张三",Age:20,}c.ProtoBuf(http.StatusOK,data)})r.Run(":8080")}在Gin中,我们直接使用生成的module.User即可,把它作为参数传给c.ProtoBuf方法,这样Gin就帮我们自动序列化(其实内部实现还是golangprotobuf库),然后我们就可以通过http://localhost:8080/protobuf获取的这个序列化数据了。这个就是ProtocolBufferAPI。客户端反序列化ProtoBuf数据反序列化也很简单,我们先启动上面的服务端ProtocolBufferAPI服务。1234567891011121314151617funcmain(){resp,err:=http.Get("http://localhost:8080/protobuf")iferr!=nil{fmt.Println(err)}else{deferresp.Body.Close()body,err:=ioutil.ReadAll(resp.Body)iferr!=nil{fmt.Println(err)}else{user:=&module.User{}proto.UnmarshalMerge(body,user)fmt.Println(*user)}}}以上就是反序列化,得到User对象的例子。我们运行这段代码,可以看到{张三20{}[]0},拿到了我们想要的信息。这里的关键点,就是通过proto.UnmarshalMerge(body,user)反序列化。GinProtoBuf源代码分析原理实现那么Gin是如何实现ProtoBuf序列化的呢?我们从Gin的源代码分析上来看Gin比较优雅的实现,以及Gin的面向接口的编程。剩下的精彩内容请点击:GolangGin实战(十二)|ProtoBuf使用和源码分析原理实现精彩文章推荐GolangGin实战(十一)|HTML 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 渲染GolangGin实战(十)|XML渲染GolangGin实战(九)|JSONP跨域和劫持GolangGin实战(八)|JSON渲染输出GolangGin实战(七)|分组路由源代码分析GolangGin实战(六)|获取Form表单参数和原理分析GolangGin实战(五)|接收数组和mapGolangGin实战(四)|URL查询参数的获取和原理分析GolangGin实战(三)|路由参数GolangGin实战(二)|简便的RestfulAPI实现GolangGin实战(一)|快速安装入门 - 全文 企业安全文化建设方案企业安全文化建设导则安全文明施工及保证措施创建安全文明校园实施方案创建安全文明工地监理工作情况 完-
本文档为【GolangGin实战-ProtoBuf使用和源码分析原理实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
资教之佳
暂无简介~
格式:doc
大小:114KB
软件:Word
页数:6
分类:互联网
上传时间:2023-06-20
浏览量:6