Google.Protobuf的学习(理解基本的使用流程) - Go语言中文社区

Google.Protobuf的学习(理解基本的使用流程)


上次我们提到了一个比较特殊的类,Addressbook,然后他开头第二行有这末个东西

要编辑这个proto后缀的文件,需要用protoc来编辑

https://github.com/protocolbuffers/protobuf/releases

不要问我为什么不下载64位的,问就是64位的我不会搞

为.exe文件设置环境变量

这样做的好处是,在任何地方都可以运行.exe文件

此电脑-属性-高级系统设置-高级-环境变量-编辑用户变变量的Path变量-添加protoc.exe的所在目录.

比如我的目录是:D:Protocprotoc-3.7.0-rc-2-win32bin

迁移include文件夹下的文件

如果没有include文件夹下的文件,在使用protoc.exe时会提示缺少googleprotobuftimestamp.proto
解决办法是将include/google文件夹移动到指定了环境变量的文件夹


然后就可以在cmd中输入protoc,他应该会像配置Java环境那样有一大长串

准备工作做好了,我们来找找这个万恶之源,address.protoc

然后把它拖到Rider查看(报错可以不用管,因为我们是强行直接读取的文件,它所依赖的包或者文件并没有被我们当前的工程所涵盖,所以会报错)

发现比较难懂
package 对应于c#中的命名空间 
required 对应类的属性 (该变量必填)
optional 创建一个具有默认值的属性,通过[default=XXX]设置默认值,不添加默认为空置。如string默认为“”,int默认为0 
enum 创建枚举 
message 创建自定义类或内部类 
repeated 对应list列表数据 

有同学发现了,明明package才代表命名空间,但我们的AdressBook类的命名空间却是

为什么呢?正好,我们做个实验,顺便学习一下使用protoc.exe生成cs文件

我们把这一行注释

由于我的addressbook.proto在D:protobuf-csharp-3.7.0-rc-2protobuf-3.7.0-rc-2examples

所以我的命令行输入如下(注意,第三句的/与a之间有空格,不然会出错)

d:
cd D:protobuf-csharp-3.7.0-rc-2protobuf-3.7.0-rc-2examples
protoc --csharp_out=./ addressbook.proto

然后我们就发现生成了AddressBook.cs文件

至于它的命名空间,是我们的package名,tutorial(他底层把T大写了)

所以我们得出结论,是下面那行

option csharp_namespace = "Google.Protobuf.Examples.AddressBook"

把package所重写了

 

最后,分享给大家protobuf的常用语法

.proto类型

Java 类型

C++类型

备注

double

double

double

 

float

float

float

 

int32

int

int32

使用可变长编码方式。编码负数时不够高效——如果你的字段可能含有负数,那么请使用sint32。

int64

long

int64

使用可变长编码方式。编码负数时不够高效——如果你的字段可能含有负数,那么请使用sint64。

uint32

int[1]

uint32

Uses variable-length encoding.

uint64

long[1] uint64 Uses variable-length encoding.

sint32

int

int32

使用可变长编码方式。有符号的整型值。编码时比通常的int32高效。

sint64

long

int64

使用可变长编码方式。有符号的整型值。编码时比通常的int64高效。

fixed32

int[1]

uint32

总是4个字节。如果数值总是比总是比228大的话,这个类型会比uint32高效。

fixed64

long[1]

uint64

总是8个字节。如果数值总是比总是比256大的话,这个类型会比uint64高效。

sfixed32

int

int32

总是4个字节。

sfixed64

long

int64

总是8个字节。

bool

boolean

bool

 

string

String

string

一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本。

bytes

ByteString

string

可能包含任意顺序的字节数据。

以及

https://blog.csdn.net/u011518120/article/details/54604615

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_15020543/article/details/86776717
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-06 22:21:20
  • 阅读 ( 1477 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢