protobuf是什么

88 阅读1分钟

一句话理解:比json传输效率更高且体积更小的数据格式

举例说明: 在golang中有这样一个Hello结构体:

type Hello struct{
    Name string `json:"name"`
}

使用json.Marshal方法获得的数据长度为15

a := Hello{
   Name: "JOJO",
}

使用proto: 1.先定义一个hello.proto文件

syntax = 'proto3';

//protoc -I . goods.proto --go_out=plugins=grpc:.
option go_package = "./;hello";
message HelloRequest{
  string name = 1; //1是编号
}

2.生成对应的golang代码

protoc -I . goods.proto --go_out=plugins=grpc:.

3.使用

s := hello.HelloRequest{
   Name: "JOJO",
}
rsp, _ := proto.Marshal(&s)

获得的byte数组长度仅为6

结论:

  1. proto优点:字段越多,体积相对更小,传输速度更快,没有语言限制,常用语grpc等微服务框架传输数据
  2. proto缺点:使用相对于json更为复杂