golang生成protobuf和json对比

本文介绍了如何在Go中创建和使用protobuf3协议缓冲区,包括定义消息类型、HelloService接口以及生成gRPCstub。对比了protobuf和JSON序列化后的长度差异。
摘要由CSDN通过智能技术生成

创建一个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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值