gpt4 book ai didi

go - 从 golang 结构生成 proto 文件

转载 作者:IT王子 更新时间:2023-10-29 01:25:15 24 4
gpt4 key购买 nike

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

例如:

type A struct {
a int
b B
}

type B struct {
c []C
}

type C struct {
x int
}

应该生成:

message A, B, C 等。proto3 是首选。

https://github.com/kubernetes/kubernetes/tree/master/cmd/libs/go2idl似乎有一些相关但没有记录。有什么选择吗?

最佳答案

我找到了包,从 Go 源代码生成 .proto 文件: proteus (https://github.com/src-d/proteus)

Proteus/proʊtiəs/是一种工具,可从您的 Go 结构、类型和函数生成 Protocol Buffer 版本 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 类型生成 proto 文件、marshal/unmarshal 和其余的 protobuf 内容,为您的包生成 RPC 客户端和服务器接口(interface)以及 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 文档。

关于go - 从 golang 结构生成 proto 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38724556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com