简介

本文主要给大家介绍了关于go语言安装使用protobuf的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
protobuf是Google开发出来的一个语言无关、平台无关的数据序列化工具,在rpc或tcp通信等很多场景都可以使用。通俗来讲,如果客户端和服务端使用的是不同的语言,那么在服务端定义一个数据结构,通过protobuf转化为字节流,再传送到客户端解码,就可以得到对应的数据结构。这就是protobuf神奇的地方。并且,它的通信效率极高,“一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一”。
安装
编译安装protobuf的编译器protoc
wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz tar zxvf protobuf-2.6.1.tar.gz cd protobuf-2.6.1./configure make make install
执行 protoc -h 查看安装是否成功
安装插件 protoc-gen-go,它是一个go程序,编译它之后将可执行文件执行路径写入环境变量
go get github.com/golang/protobuf/protoc-gen-go
获取proto包
go get github.com/golang/protobuf/proto
在go中使用
protobuf的使用方法是将数据结构写入到.proto文件中,使用protoc编译器编译(间接使用了插件)得到一个新的go包,里面包含go中可以使用的数据结构和一些辅助方法。
编写test.proto文件
package example;
enum FOO { X = 17; };
message Test {
required string label = 1;
optional int32 type = 2 [default=77];
repeated int64 reps = 3;
optional group OptionalGroup = 4 {
required string RequiredField = 5;
}
}
编译:
执行 protoc --go_out=. *.proto 生成 test.pb.go 文件
将test.pb.go文件放入example文件夹(对应上面package)中,作为example包
try
package main
import (
"log"
"github.com/golang/protobuf/proto"
"example"
)
func main() {
test := &example.Test {
Label: proto.String("hello"),
Type: proto.Int32(17),
Reps: []int64{1, 2, 3},
Optionalgroup: &example.Test_OptionalGroup {
RequiredField: proto.String("good bye"),
},
}
data, err := proto.Marshal(test)
if err != nil {
log.Fatal("marshaling error: ", err)
}
newTest := &example.Test{}
err = proto.Unmarshal(data, newTest)
if err != nil {
log.Fatal("unmarshaling error: ", err)
}
// Now test and newTest contain the same data.
if test.GetLabel() != newTest.GetLabel() {
log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel())
}
//test.GetOptionalgroup().GetRequiredField()
//etc
}
一些对应关系
test.GetLabel() 、test.GetType()获取test对象的属性test.Reset()可以使其所有属性置为0值这些只是一些特性,想要仔细研究可以查看github上的wiki:https://github.com/golang/protobuf
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# go
# protobuf
# 使用
# 生成go
# Go语言结合grpc和protobuf实现去中心化的聊天室
# Go语言使用protojson库实现Protocol Buffers与JSON转换
# Go语言中的数据格式(json、xml 、msgpack、protobuf)使用总结
# go语言中proto文件的使用
# 数据结构
# 可以使用
# 序列化
# 服务端
# 的是
# 客户端
# 相关内容
# 说了
# 这就是
# 不多
# 它是
# 给大家
# 使其
# 这篇文章
# 极高
# 谢谢大家
# 转化为
# 将可
# 可以查看
# 就可以
相关文章:
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何零基础开发自助建站系统?完整教程解析
如何基于云服务器快速搭建个人网站?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
中山网站制作网页,中山新生登记系统登记流程?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
为什么Go需要go mod文件_Go go mod文件作用说明
济南专业网站制作公司,济南信息工程学校怎么样?
网站制作模板下载什么软件,ppt模板免费下载网站?
javascript基本数据类型及类型检测常用方法小结
如何在云主机快速搭建网站站点?
Python多线程使用规范_线程安全解析【教程】
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
如何正确下载安装西数主机建站助手?
如何选择高效稳定的ISP建站解决方案?
b2c电商网站制作流程,b2c水平综合的电商平台?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
移民网站制作流程,怎么看加拿大移民官网?
如何彻底删除建站之星生成的Banner?
宝塔建站助手安装配置与建站模板使用全流程解析
如何用PHP工具快速搭建高效网站?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何快速查询域名建站关键信息?
七夕网站制作视频,七夕大促活动怎么报名?
广州建站公司哪家好?十大优质服务商推荐
北京专业网站制作设计师招聘,北京白云观官方网站?
如何在宝塔面板中创建新站点?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
如何快速搭建高效可靠的建站解决方案?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
建站主机服务器选购指南:轻量应用与VPS配置解析
简单实现Android验证码
行程制作网站有哪些,第三方机票电子行程单怎么开?
如何在腾讯云服务器快速搭建个人网站?
建站之星后台密码遗忘?如何快速找回?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
如何在阿里云服务器自主搭建网站?
如何通过WDCP绑定主域名及创建子域名站点?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
如何在VPS电脑上快速搭建网站?
建站之星导航配置指南:自助建站与SEO优化全解析
网站制作免费,什么网站能看正片电影?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
Android滚轮选择时间控件使用详解
宝塔面板如何快速创建新站点?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
*请认真填写需求信息,我们会在24小时内与您取得联系。