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