加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

从golang结构生成proto文件

发布时间:2020-12-16 09:26:26 所属栏目:大数据 来源:网络整理
导读:我有一个golang结构,其中包含对其他一些结构的引用.是否有自动方式从结构生成.proto文件? 例如: type A struct { a int b B}type B struct { c []C}type C struct { x int} 应该生成: 消息A,B,C等原型3是优选的. https://github.com/kubernetes/kubernete
我有一个golang结构,其中包含对其他一些结构的引用.是否有自动方式从结构生成.proto文件?

例如:

type A struct {
 a int
 b B
}

type B struct {
 c []C
}

type C struct {
 x int
}

应该生成:

消息A,B,C等原型3是优选的.

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

解决方法

我从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
  }

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

message User {
          int32 id = 1;
          google.protobuf.Timestamp created_at = 2;
          string username = 3;
  }

安装

go get -v gopkg.in/src-d/proteus.v1/...

要求

整个过程有两个要求.

protoc binary installed on your path
 go get -u github.com/gogo/protobuf/...

用法

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

proteus -f /path/to/protos/folder 
    -p my/go/package 
    -p my/other/go/package

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

proteus proto -f /path/to/output/folder 
    -p my/go/package 
    -p my/other/go/package
    --verbose

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

proteus rpc -p my/go/package 
    -p my/other/go/package

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读