从golang结构生成proto文件

San*_*kar 7 go protocol-buffers

我有一个golang结构,其中包含对其他一些结构的引用.是否有自动方式从结构生成.proto文件?

例如:

type A struct {
 a int
 b B
}

type B struct {
 c []C
}

type C struct {
 x int
}
Run Code Online (Sandbox Code Playgroud)

应该生成:

message A, B, C proto3是优选的.

https://github.com/kubernetes/kubernetes/tree/master/cmd/libs/go2idl似乎有相关的东西,但没有记录.任何选择?

Ker*_* Li 10

我找到了包来自Go源代码的Generate .proto文件: proteus(https://github.com/src-d/proteus)

Proteus /proʊtiəs/是一个工具,用于从Go结构,类型和函数生成协议缓冲版本3兼容的.proto文件.

这个库背后的动机是使用Go作为模型的真实来源而不是相反,然后从.proto文件生成Go代码,该文件不生成惯用代码.

生成protobuf消息

  //proteus:generate
  type User struct {
        Model
        Username string
  }

  type Model struct {
        ID int
        CreatedAt time.Time
  }
Run Code Online (Sandbox Code Playgroud)

此示例将生成以下protobuf消息.

  message User {
          int32 id = 1;
          google.protobuf.Timestamp created_at = 2;
          string username = 3;
  }
Run Code Online (Sandbox Code Playgroud)

安装

 go get -v gopkg.in/src-d/proteus.v1/...
Run Code Online (Sandbox Code Playgroud)

要求

整个过程有两个要求.

 protoc binary installed on your path
 go get -u github.com/gogo/protobuf/...
Run Code Online (Sandbox Code Playgroud)

用法

您可以为Go类型,RPC客户端和服务器接口以及包的RPC服务器实现生成proto文件,marshal/unmarshal和其余protobuf内容.也就是说,整个过程.

 proteus -f /path/to/protos/folder \
    -p my/go/package \
    -p my/other/go/package
Run Code Online (Sandbox Code Playgroud)

您只能使用proteus提供的命令行工具生成proto文件.

 proteus proto -f /path/to/output/folder \
    -p my/go/package \
    -p my/other/go/package
    --verbose
Run Code Online (Sandbox Code Playgroud)

您也可以只为包生成gRPC服务器实现.

  proteus rpc -p my/go/package \
    -p my/other/go/package
Run Code Online (Sandbox Code Playgroud)

注意:当然,如果默认值不符合您的需要,那么在proteus可通过插件扩展之前,您可以使用提供的组件将您自己的生成器命令组合在一起.查看软件包的godoc文档.

  • 对不起,这是我第一次写回答.我稍后会注意的 (2认同)

And*_*vic 5

如果有人只需要生成纯 protobuf 消息,而不需要任何 gogo、mogo、blogo 语法,您可以使用我最近编写的https://github.com/anjmao/go2proto。它非常简单,只需从给定的包含结构的 go 源包生成原始消息。它还支持 go 模块。