编译生成对应的go文件
在pb/
文件夹下创建文件Person.proto
,注意写分号。
//当前版本信息
syntax = "proto3";
//后期生成的go文件所在的包
package pb;
定义个protobuf
协议
message Person {
string name = 1; //顺序1
int32 age = 2; //循序2
repeated string email = 3; //在go中是一个[]string 顺序3
repeated PhoneNumber Phones = 4; //
oneof Data {
string soc1 = 5;
uint32 soc2 = 6;
}
}
将.proto文件进行编译生成对应的go文件
proto --proto_path=IMPORT_PATH --go_out=DST_DIR path/to/file.proto
或者使用下面这个简易指令,将当前的目录下的全部的Proto文件进行编译,生成的go文件全部放在当前路径
protoc --go_out=. *.proto
通过编译指定会得到一个.pb.go文件。该文件使不允许编辑的。
使用Protobuf协议编程
-
定义一个protobuf结构体对象
person := &pb.Person{ Name:"lucas", Age: 24, }
-
将一个protobuf结构体对象 转化成二进制对象
data, err := proto.Marshal(person)
-
发送
data
-
接收对端发送过来的
clientdata
,进行解码proto.Unmarshal(clientdata, person)
对比
-
json:
优势:可读性强,是明文
弊端:编解码json数据格式效率相对较低
场景:web
-
xml:
基于标签
弊端:冗余大,编解码相对慢
-
protobuf:
二进制
优势:编解码速度快
劣势:可读性不强,传输过程中不是明文。
场景:后端进程之间的传输、分布式系统、微服务系统、服务器