golang生成protobuf和json对比

创建一个proto文件

  • 指定proto版本为proto3, 目前主流使用的都是proto3
syntax = "proto3";
option go_package="./goproto;goproto";
// 普通proto类型
message HelloRequest {
    string name = 1; // 1是编号不是值
}
message HelloResponse {
    string reply = 1;
}
// helloService rpc 调用
service HelloService{
    rpc Hello(HelloRequest) returns (HelloResponse);
}

生成go stub

  • 使用go-grpc 插件会帮我自动生成客户端stub和服务端stub
// 只生成proto对应的类型
protoc  --go_out=. helloword.proto
// 同时生成类型,和对应的rpc调用代码
protoc --go_out=. --go-grpc_out=. helloword.proto

比较protobuf和json序列化后的长度

  • pb序列化后占5个字节,json占14个字节
func main() {
	h := &goproto.HelloRequest{
		Name: "boy",
	}
	pbMarshal, _ := proto.Marshal(h)
	fmt.Println(len(pbMarshal))
	jsonMarshal, _ := json.Marshal(h)
	fmt.Println(len(jsonMarshal))
}
// 5
// 14

你可能感兴趣的:(golang,golang,json,开发语言,rpc)