golang中使用protobuf 
                                                    
                        
                    
                    
  
                    
                    1、为什么使用protobuf?
protobuf 即 Protocol Buffers,Google 开发的一种数据描述语言,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。protobuf 以二进制方式存储,占用空间小。
protobuf 广泛地应用于远程过程调用(RPC) 的二进制传输,使用 protobuf 的目的非常简单,为了获得更高的性能。传输前使用 protobuf 编码,接收方再进行解码,可以显著地降低二进制传输的大小。另外一方面,protobuf 可非常适合传输结构化数据,便于通信字段的扩展。
使用 protobuf 一般分为以下 2 步:
- 按照 protobuf 的语法,在 .proto文件中定义数据结构,并使用protoc生成 Go 代码(.proto文件是跨平台的,还可以生成 C、Java 等其他源码文件)。
- 在项目代码中引用生成的 Go 代码。
2、protobuf安装
- 从protobuf release下载适合自己平台的压缩包
- 解压下载的压缩包
- 安装protoc-gen-go:go get -u github.com/golang/protobuf/protoc-gen-go,一般会安装在GOPATH目录下
- 在解压的文件中找到bin目录下的proto.xxx(Windows平台是protoc.exe)拷贝到GOPATH/bin目录下
- 执行protoc --version即可看到如下信息 
3、使用protobuf
3.1、编写.proto文件
syntax = "proto3";
package geecachepb;
message Request {
  string group = 1;
  string  key = 2;
}
message Response {
  bytes value = 1;
}
service GroupCache {
  rpc Get(Request) returns (Response);
}3.2、执行命令生成 go 代码
protoc --go_out=. *.proto此时执行生成go代码的命令可能会看到下面这种报错信息
unable to determine Go import path for "geecachepb.proto"解决方式:在.proto文件中加一行,如下图

3.3、code中实现
3.3.1、发送方使用proto编码
bytes, err := proto.Marshal(&pb.Response{Value: view.ByteSlice()})3.3.2、接收方使用proto解码
if err := proto.Unmarshal(bytes, out); err != nil {
    return fmt.Errorf("decoding response error: %s", err.Error())
}到此大功告成~
本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           ConnorK 的个人博客
 ConnorK 的个人博客
         
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号