Windows protoBuf 安装+学习

Windows protoBuf 安装+学习

<article class="baidu_pl">
    <div id="article_content" class="article_content clearfix">
    <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b3c43d3711.css">
            <div id="content_views" class="markdown_views prism-atom-one-dark" deep="6">
                <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
                    <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
                </svg>
                <p></p>


一、protoBuf是什么?

  1. protobuf是类似与json一样的数据描述语言(数据格式)
  2. protobuf非常适合于RPC数据交换格式
    protoBuf是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。

二、protoBuf优缺点

优点

  1. 序列化后体积相比Json和XML很小,适合网络传输
  2. 支持跨平台多语言
  3. 消息格式升级和兼容性还不错
  4. 序列化反序列化速度很快,快于Json的处理速度

缺点

  1. 应用不够广(相比xml和json)
  2. 二进制格式导致可读性差(因为是二进制格式,所以安全性较好)
  3. 缺乏自描述
xmljsonprotoBuf
体积很小
传输效率相对json慢很快
简单性结构复杂结构简单相对简单
通用性没有json普遍普遍不普遍
可读性凑合差,二进制文件

三、protoBuf组件安装

1. protoc下载

下载链接:https://github.com/protocolbuffers/protobuf/releases
在这里插入图片描述
在任意地方新建一个protobuf文件夹,将下载好的压缩包解压到protobuf文件夹中,本文在E盘下新建protobuf文件夹。解压后,进入其bin目录,会看见protoc.exe文件
在这里插入图片描述


配置环境变量
方法一:直接将protoc.exe复制到GOPATH/bin
方法二:配置环境变量:
环境变量-系统变量-Path-编辑-新建-proto.exe所在的路径,本文即:E:\protobuf\bin
为了统一方便管理,建议使用方法一。

验证:打开cmd,输入protoc --version


2. protoc-gen-go下载

下载:go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
最后在GOPATH/bin中看到protoc-gen-go.exe文件说明安装成功。


四、protoc命令

protoc xxx.proto --go_out=.
或者
protoc --go_out=. xxx.proto
或者
protoc --go_out=. *.proto

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

五、protoBuf语法

1. 例子

参考文档(需翻墙):https://developers.google.com/protocol-buffers/docs/proto3

syntax = "proto3"; 						//指定版本信息,不指定会报错
package pb;						//后期生成go文件的包名
//message为关键字,作用为定义一种消息类型
message Person{
	//    名字
    string name = 1;
	//    年龄
    int32  age = 2 ;
}

enum test{
int32 age = 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • protobuf消息的定义(或者称为描述)通常都写在一个以 .proto 结尾的文件中。
  • 该文件的第一行指定正在使用proto3语法:如果不这样做,协议缓冲区编译器将假定正在使用proto2。这也必须是文件的第一个非空的非注释行。
  • 第二行package指明当前是pb包(生成go文件之后和Go的包名保持一致)
  • 最后message关键字定义一个Person消息体,类似于go语言中的结构体,是包含一系列类型数据的集合。许多标准的简单数据类型都可以作为字段类型,包括boolint32floatdouble,和string。也可以使用其他message类型作为字段类型。
  • 在message中有一个字符串类型的value成员,该成员编码时用1代替名字。我们知道,在json中是通过成员的名字来绑定对应的数据,但是Protobuf编码却是通过成员的唯一编号来绑定对应的数据,因此Protobuf编码后数据的体积会比较小,能够快速传输,缺点是不利于阅读。

2. message的格式说明

消息由至少一个字段组合而成,类似于Go语言中的结构体,每个字段都有一定的格式:

//注释格式 注释尽量也写在内容上方
(字段修饰符)数据类型 字段名称 = 唯一的编号标签值;

 
 
  • 1
  • 2

3. message常见的数据类型与go中类型对比

.proto类型Go类型介绍
doublefloat6464位浮点数
floatfloat3232位浮点数
int32int32使用可变长度编码。编码负数效率低下——如果你的字段可能有负值,请改用sint32。
int64int64使用可变长度编码。编码负数效率低下——如果你的字段可能有负值,请改用sint64。
uint32uint32使用可变长度编码。
uint64uint64使用可变长度编码。
sint32int32使用可变长度编码。符号整型值。这些比常规int32s编码负数更有效。
sint64int64使用可变长度编码。符号整型值。这些比常规int64s编码负数更有效。
fixed32uint32总是四字节。如果值通常大于228,则比uint 32更有效
fixed64uint64总是八字节。如果值通常大于256,则比uint64更有效
sfixed32int32总是四字节。
sfixed64int64总是八字节。
boolbool布尔类型
stringstring字符串必须始终包含UTF - 8编码或7位ASCII文本
bytes[]byte可以包含任意字节序列

4. protobuf高级用法

protobuf除了上面的简单类型还有一些复杂的用法,如下:

message嵌套

messsage除了能放简单数据类型外,还能存放另外的message类型,如下:

syntax = "proto3"; 				//指定版本信息,不指定会报错,默认proto2
package pb;						//后期生成go文件的包名
//message为关键字,作用为定义一种消息类型
message Person{
	//    名字
    string name = 1;   //编号可以不从1开始,但是不能重复。也不能使用19000 ~ 19999
	//    年龄
    int32  age = 2 ;
    //定义一个message
    message PhoneNumber {
    string number = 1;
    int64 type = 2;
	}
	PhoneNumber phone = 3;
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

repeated关键字

repeadted关键字类似与go中的切片,编译之后对应的也是go的切片,用法如下:

syntax = "proto3"; 						//指定版本信息,不指定会报错
package pb;						//后期生成go文件的包名
//message为关键字,作用为定义一种消息类型
message Person{
	//    名字
    string name = 1;
	//    年龄
    int32  age = 2 ;
    //定义一个message
    message PhoneNumber {
    string number = 1;
    int64 type = 2;
	}
repeated PhoneNumber phone = 3;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

默认值

解析数据时,如果编码的消息不包含特定的单数元素,则解析对象对象中的相应字段将设置为该字段的默认值。不同类型的默认值不同,具体如下:

  • 对于字符串,默认值为空字符串。
  • 对于字节,默认值为空字节。
  • 对于bools,默认值为false。
  • 对于数字类型,默认值为零。
  • 对于枚举,默认值是第一个定义的枚举值,该必须为0。
  • repeated字段默认值是空列表
  • message字段的默认值为空对象

enum关键字

在定义消息类型时,可能会希望其中一个字段有一个预定义的值列表。比如说,电话号码字段有个类型,这个类型可以是,home,work,mobile。我们可以通过enum在消息定义中添加每个可能值的常量来非常简单的执行此操作。实例如下:

syntax = "proto3"; 						//指定版本信息,不指定会报错
package pb;						//后期生成go文件的包名
//message为关键字,作用为定义一种消息类型
message Person{
	//    名字
    string name = 1;
	//    年龄
    int32  age = 2 ;
    //定义一个message
    message PhoneNumber {
    string number = 1;
    PhoneType type = 2;
	}
repeated PhoneNumber phone = 3;

}

//enum为关键字,作用为定义一种枚举类型
enum PhoneType {
MOBILE = 0; //枚举值必须从0开始
HOME = 1;
WORK = 2;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

如上,enum的第一个常量映射为0,每个枚举定义必须包含一个映射到零的常量作为其第一个元素。这是因为:

  • 必须有一个零值,以便我们可以使用0作为数字默认值。
  • 零值必须是第一个元素,以便与proto2语义兼容,其中第一个枚举值始终是默认值。

enum还可以为不同的枚举常量指定相同的值来定义别名。如果想要使用这个功能必须讲allow_alias选项设置为true,负责编译器将报错。示例如下:

syntax = "proto3"; 						//指定版本信息,不指定会报错
package pb;						//后期生成go文件的包名
//message为关键字,作用为定义一种消息类型
message Person{
    //    名字
    string name = 1;
    //    年龄
    int32  age = 2 ;
    //定义一个message
    message PhoneNumber {
        string number = 1;
        PhoneType type = 2;
    }
repeated PhoneNumber phone = 3;

}

//enum为关键字,作用为定义一种枚举类型
enum PhoneType {
//如果不设置将报错
option allow_alias = true;
MOBILE = 0;
HOME = 1;
WORK = 2;
Personal = 2;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

oneof关键字

如果有一个包含许多字段的消息,并且最多只能同时设置其中的一个字段(联合体),则可以使用oneof功能,示例如下:

message Person{
    //    名字
    string name = 1;
    //    年龄
    int32  age = 2 ;
    //定义一个message
    message PhoneNumber {
        string number = 1;
        PhoneType type = 2;
    }
repeated PhoneNumber phone = 3;
oneof data{
    string school = 5;  //编号不能重复,根据习惯顺次往下编
    int32 score = 6;
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
文章知识点与官方知识档案匹配,可进一步学习相关知识
  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论
  •             </div>
            </li>
        </ul>
        </div>
        <div class="toolbox-right">
        </div>
    </div>  
    
Windows10 安装 protobuf
09-11 5207
一、 protobuf安装二、相关地址 一、 protobuf安装

1、protoc的源码和各个系统的预编译包 - https://github.com/protocolbuffers/protobuf/releases

2、选择对应的安装文件下载,解压(tips:文件解压的路径最好是英文,无任何特殊字符,包括空格;之前安装es插件时就因为Program Files中有个空格,导致安装失败)

3、添加到环境变量中(win10)
步骤:电脑 -> 右键 -> 属性 -> 高级.


Windows环境下 protobuf初步 学习指南
06-20
Windows环境下 protobuf初步 学习指南
参与评论 您还未登录,请先 登录 后发表或查看评论
protobuf-win环境搭建
12-28
下载protoc.exe 和 protobuf-java.jar 下载protoc.exe 和 protobuf-java-2.5.0.jar
Protobuf windows 安装使用
11-23 5058
Protobuf3 windows 安装和使用
windowsprotobuf下载、 安装、使用
10-19 3095
protobuf下载 1)直接点击github链接GitHub/ protobuf 2) 下载 protobuf-cpp-3.6.0.zip或任一版本
  1. 解压,目录结构如下图

4)下载安装CMAKE
5)打开cmake-gui.exe

6)点击Configure按扭,选择Visual Studio 版本(根据需要选择x64),会弹出一些红色的选项.记住安装路径不要选择系统目录,不然…


livedata原理分析 (解除livedata粘性事件)
先思考几个问题

livedata是怎么做的监听生命周期的 ?
postValue和setValue有什么区别 ?
事件是如何发送和接收的?
livedata粘性事件是什么 ?
livedata的粘性事件是怎样引起的 ?

首先需要知道注册监听和发送事件的几个方法 observe,postvalue,setvalue,我们主要是对这几个方法进行分析
发送事件
livedata发送事件的方法有两种 postValue和setValue
我们先来看setValue

直接调用到了MutableLiveData的


Protobuf 编译器 Windows 安装方法
01-28 2676
本文主要介绍 protobuf 编译器在 Windows 下的 安装

下载编译器

访问Releases · protocolbuffers/protobuf · GitHub链接然后针对不同的操作系统下载最新的编译器版本。

下载完成后到本地计算机上找到这个文件并且解压。

解压文件

然后将下载的压缩文件解压到 D:\Dkits<em>protobuf 文件夹中。

当然你也可以解压到不同的文件夹中。

正在上传…重新上传取消

解压后的文件夹目录如下。

设置 PATH

当完成下面…


Windows下使用 protobuf
07-18 787
Windows下使用 protobuf下载 windows下的protbuf配置环境变量使用 protobuf生成java类 下载 windows下的protbuf 直接去 protobuf在github下的连接【下载】。 选择 windows下64位

下载后解压即可。
当然了github的资源有可能十分卡,这里提供了我上传的资源,下载连接
配置环境变量
计算机 右键 -》 属性 选择 【高级系统设置】

弹出对话框 选择 【环境变量】

弹出对话框后,找到Path 双击

出现以下对话框,点击 【新建】 输入您解压


windows安装 protobuf与protoc
04-25 734
windows安装 protobuf与protoc protobuf与protoc的简介首先我们先介绍 protobuf 安装方式然后 安装proto-gen-go插件(必装)然后我们来通过proto文件生成对应go语言文件 protobuf与protoc的简介

protobuf可以说是一种单独的语言,他是Google开发的一款数据压缩协议,我们可以使用他压缩的数据在各个服务之间传输,它拥有比jsongengjia高效的传输效率,而且数据的压缩比也更高(可以自己写一个简单的服务测试一下),protoc就是用来基于


Windows安装 protobuf
Windows安装 protobuf 第1步 查询 protobuf版本 查找hadoop内自带的 protobuf的jar包版本。 例如: 我的hadoop版本是hadoop-2.6.5 查询路径:hadoop-2.6.5\share\hadoop\common\lib\ protobuf-java-2.5.0.jar, 所以需要下载的 protobuf的版本应该是 protobuf-java-2.5。 ...
protobuf 安装使用入门详细介绍新手教程( Windows,Visual Studio 2019,C + +
最新发布
07-27 440
protobuf是一个跨平台和跨语言的数据结构存储和传输的便利工具。比如C + +实现了算法,需要用Python或者C#去调用,并实现在不同语言间用户自定义复杂结构的数据传输。比如用PyTorch在 Windows平台下训练了一个Python语言的模型,需要部署到Linux系统下面的C + +写的软件中。跨平台,跨语言的数据结构传输是非常困难的,如果使用XML等工具,传输的速度和解析速度会受限制,而 protobuf很好地解决了这一困难。}...
windows protobuf编译
编译 protobuf
windows下protoc的 安装配置
1、下载protoc 安装包 (1)、上面是一种通过下载 安装包的方式手动配置 安装protoc的方式 ①、地址: https://github.com/protocolbuffers/ protobuf/releases ②、将解压后的包放在合适的地方,并在环境变量path中添加到PATH/protoc-3.19.1/bin(protoc.exe所在目录) ③、检查版本:cmd—>protoc --version (2)、如果go的代理设置正确的话直接通过go get拉去到GOPATH下的bin目录里 go
go中使用 protobuf
04-04 967
在go中使用 protobuf的过程
Windows系统下 安装 protobuf
protobuf的简介 Protocol buffers是用于序列化结构化数据的灵活、高效、自动化的机制——比如XML,但是更小、更快、更简单。您只需定义一下希望如何对数据进行结构化,然后就可以使用特殊生成的源代码来轻松地编写和读取到各种数据流中的结构化数据,并使用各种语言。你甚至可以更新你的数据结构,而不必破坏那些被编译为“旧”格式的程序。 Google protobuf...
windows安装和配置 protobuf流程
11-14 3247
1.下载 protobuf 到https://github.com/protocolbuffers/ protobuf/releases下载对应的 安装包 这里以3.8.0版本为例

下载完成后解压到D盘

2.配置protobuf环境变量
接下来开始配置环境变量,右键此电脑,点击属性。

点击高级系统设置

在弹出的对话框中点击环境变量

点击新建,输入变量名以及protobuf安装路径后点击确定
变量名:PROTOBUF_HOME
变量值:D:\protoc-3.8.0-win64\bin

找到系统变量中


windows 下使用 protobuf
热门推荐
01-05 4万+
1、下载 protobuf

下载地址:https://github.com/google/protobuf/releases

选择protoc-xxx-win32.zip下载

2、配置环境变量

将解压出来的protoc.exe放在一全英文路径下,并把其路径名放在windows环境变量下的path下。

放在系统环境变量下和用户环境变量下都是可以的,这里放在了用户环境变量下。


Windows下Protoc的 安装和简单测试
一:下载

附github地址;https://github.com/protocolbuffers/protobuf/releases/tag/v3.4.0

下载完成后解压到你要的目录下。

二:安装

1,设置环境变量

2,打开CMD,执行protoc --version,如果出现版本号,则安装成功。

三:测试

1,在你要的目录下建立一个test文件夹

2,test文件下创建一个test.proto文件

3,文本编辑器打开test.proto,写入一下代码,保


windows 10 google. protobuf 协议的 安装方法
05-09 384
windows 10 google. protobuf 协议的 安装方法
Windows下完整 安装配置 protobuf 3.15教程及示例程序
Windows下完整 安装配置 protobuf 3.15教程及示例程序 1、概述 由于工作的需要,现在需要在不同平台和语言使用谷歌的序列化工具 protobuf来封装数据。浏览了网上的很多教程,都不太完善,所以萌生了自己结合各家所长整理出 Windows下最全的 安装教程供大家参考。 2、 protobuf下载 下载 protobuf有许多途径,可以在谷歌的网上下载,也可以在Github中进行下载,两个连接分别如下: github下载地址 谷歌下载地址 3、 安装 protobuf (1)下载软件,我下载的是protobu
ProtobufWindows上的 安装与试使用
04-09 158
刚接触到 服务器,导师让我尝试一下发送消息的序列化。之前捣鼓了一天的messagepack,还是不能用,问了问导师,说 Protobuf很好用,于是就试着 安装Protobuf。Github上的Readme把所有步骤都写得很清楚,但是是全英文的,有能力的可以直接跟着github上的步骤 安装,地址在这。我也就是把这个步骤翻译一下,再说了一点自己遇到的问题。 在装 protobuf之前需要先将cmak

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值