我找到了这个包,它可以从Go源代码中生成.proto文件:proteus (https://github.com/src-d/proteus)
Proteus /proʊtiəs/ 是一个工具,可以从你的Go结构体、类型和函数中生成兼容协议缓冲区版本3的.proto文件。
该库的动机是将Go用作模型的真实来源,而不是反过来从.proto文件生成Go代码,这种方法无法生成惯用代码。
生成protobuf消息
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类型生成proto文件、marshal/unmarshal以及其他protobuf内容,为您的包生成RPC客户端和服务器接口以及RPC服务器实现。也就是说,整个过程。
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 文档。