Golang使用protobuf



  • 拷屁一段protobuf的简介:

    Protocol buffers是一个灵活的、高效的、自动化的用于对结构化数据进行序列化的协议,与XML相比,Protocol buffers序列化后的码流更小、速度更快、操作更简单。你只需要将要被序列化的数据结构定义一次(译注:使用.proto文件定义),便可以使用特别生成的源代码(译注:使用protobuf提供的生成工具)轻松的使用不同的数据流完成对这些结构数据的读写操作,即使你使用不同的语言(译注:protobuf的跨语言支持特性)。你甚至可以更新你的数据结构的定义(译注:就是更新.proto文件内容)而不会破坏依赖“老”格式编译出来的程序。

    示例.proto文件(api.proto):

    syntax = "proto3";
    
    package gkeng.comet;
    
    option go_package = "grpc";
    
    import "github.com/gogo/protobuf/gogoproto/gogo.proto";
    
    // protocol
    message Proto {
      int32 ver = 1 [(gogoproto.jsontag) = "ver"];
      int32 op = 2 [(gogoproto.jsontag) = "op"];
      int32 seq = 3 [(gogoproto.jsontag) = "seq"];
      int32 body = 4 [(gogoproto.jsontag) = "body"];
    }
    

    生成指令(.pb.go文件)

    protoc -I=. -I=$GOPATH/src -I=$GOPATH/src/github.com/gogo/protobuf --go_out=plugins=grpc:. ./api.proto

    • 通过-I引入了当前目录、Golang的源码目录和github.com/gogo/protobuf

    • 列表--go_out=plugins=grpc:.:在执行时添加grpc的plugin

    • 列表指定的./api.proto就是我们编写的数据结构文件


    .proto 描述文件的编写说明这里就不写了


Log in to reply