当前位置: 首页 > 知识库问答 >
问题:

从golang结构生成原型文件

艾骏喆
2023-03-14

我有一个golang结构,其中包含对其他结构的引用。有没有一种自动化的方法来生成。结构中的原始文件?

例如:

type A struct {
 a int
 b B
}

type B struct {
 c []C
}

type C struct {
 x int
}

应生成:

消息A、B、C等。首选proto3。

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


共有3个答案

逑景铄
2023-03-14

如果有人在GO Get Error中找到这里。您只需要GO111MODULE=off

GO111MODULE=off  go get -v gopkg.in/src-d/proteus.v1/...
GO111MODULE=off go get -v -u  github.com/gogo/protobuf/...
史旺
2023-03-14

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

苍轶
2023-03-14

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

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

这个库背后的动机是使用Go作为模型的真实来源,而不是反过来,然后从一个实例生成Go代码。proto文件,它不会生成惯用代码。

生成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服务器实现生成原始文件、列表/散集和其余原型东西。也就是说,整个过程。

 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文档。

 类似资料:
  • 根据@Ryan Emerson的建议更新了我的代码,但我仍然没有看到任何自动生成的Impl文件和proto文件 著者班 书班 具有覆盖方法的上下文初始化器类 然后实例化上下文初始化器的ClassA 梅文 我仍然没有看到任何自动生成的原始文件。有人能告诉我我做错了什么吗?

  • 当我尝试使用Makefile命令生成proto文件时-,我得到这个错误- 当我运行which go时,我有: 哪个协议返回此- 下面是我的<代码>。zshrc看起来像: 我也安装了插件 请否则我应该添加我的以避免此错误吗?

  • 问题内容: 我有以下几种类型: 我可以使用use ,但是我 不能 使用 似乎可以嵌入语法,但是使用它无效吗? 问题答案: 嵌入式类型是(未命名的)字段,由不合格的类型名称引用。 规格:结构类型: 使用类型但没有显式字段名称声明的字段是 匿名字段 ,也称为 嵌入式 字段或该类型在结构中的嵌入。必须将嵌入式类型指定为类型名称或指向非接口类型名称的指针,并且本身不能为指针类型。 非限定类型名称充当字段名

  • 问题内容: 我正在尝试在PMA中还原数据库,但只能访问frm和ibd文件,而不能访问我了解您需要的ib_log文件。 我知道我可能无法恢复数据库数据,但是是否可以从frm文件恢复表的结构? 问题答案: 我仅从和文件中还原了该表。 获取SQL查询以创建表 如果您已经知道表的架构,则可以跳过此步骤。 首先,安装MySQL Utilities。然后,您可以在命令提示符(cmd)中使用命令。 其次,使用以

  • c.h 得到这样的结果: 这似乎不正确, 我正在golang寻找类似的东西:mvar.VI32 谢谢 我的头很痛,不擅长C / C, 这是我的场景,调用一个SDK(带有.so库) c.h 我试着用Go语言调用函数ASFGetActiveFileInfo,如下所示: 得到这个错误: 尝试: 得到这个错误 这个问题有什么解决方案吗? 感谢@peterSO的回答,它工作,但仍然显示错误: 事实非常接近