Protocol Buffer的使用总结

因为在学习golang的gRPC框架时需要用到protobuf,所以重点学习一下。之前也曾接触过,因为它是把数据压缩成二进制从而降低了压缩大小,在网络传输的时候效率更高。相对于json,它的文件体积更小,相对于xml,解析速度更快。

protobuf的数据格式有一下几种:

1,enum类型:类似与很多语言的枚举类型

enum Sanguo{
Wei=1;
Shu=2;
Wu=3;
}
2,message类型:类似于其他语言的类或者结构体

message Student{
required string sid;
required string name;
string address;
string telephone;
int32 age;
}
required表示在序列化和反序列化之前必须赋值,每个message中必须有一个字段为required类型,与此类似的还有optional,repeated类型。
service UserService{
    rpc CreateUser(User) returns (ResultResponse){};
    rpc GetUserInfo(User) returns (User){};
    rpc DeleteUser(User) returns (ResultResponse){};
}

但是在pb里没有int类型,而只有int32,int64。具体的类型表后面详细论述。

3,service类型:类似于其他语言中的方法接口。

service UserService{
    rpc CreateUser(User) returns (ResultResponse){};
    rpc GetUserInfo(User) returns (User){};
    rpc DeleteUser(User) returns (ResultResponse){};
}
rpc表示方法的类型,User表示传入的参数,参数要求必须是pb中自定义的message类型,如果没有合适的message类型可以自定义个通用的参数类型,返回时为returns而不是return,返回的类型也必须是message类型。

但是与message类型不同的是service不用指定其属性的序号。

4,嵌套类型:就是一个message中的字段是另一个message类型

message Person{
Student s=1
string Idcard =2
}


pb中主要的类型就这么多,但是还会用到一些常见的属性:

package包:package info表示序列化为指定语言类型后的命名空间名称。

pb类型对照:



.proto Type

Notes

C++ Type

Java Type

double

 

double

double

float

 

float

float

int32

Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.

int32

int

int64

Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.

int64

long

uint32

Uses variable-length encoding.

uint32

int

uint64

Uses variable-length encoding.

uint64

long

sint32

Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.

int32

int

sint64

Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. 

int64

long

fixed32

Always four bytes. More efficient than uint32 if values are often greater than 228

uint32

int

fixed64

Always eight bytes. More efficient than uint64 if values are often greater than 256.

uint64

long

sfixed32

Always four bytes.

int32

int

sfixed64

Always eight bytes.

int64

long

bool

 

bool

boolean

string

A string must always contain UTF-8 encoded or 7-bit ASCII text.

string

String

bytes

May contain any arbitrary sequence of bytes.

string

ByteString




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值