首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用grpc在拆分包中使用grpc的原型

用grpc在拆分包中使用grpc的原型
EN

Stack Overflow用户
提问于 2022-04-20 18:13:58
回答 1查看 742关注 0票数 2

我正在尝试使用这里描述的六角形体系结构来完成Go项目。在我的项目中,我使用从gRPC文件用protoc生成的protoc通信。

目录结构:

代码语言:javascript
复制
|- grpc.proto
|-internal
  |-core
    |-domain
  |-services
    |- grpcprotocol

而且,我的grpc.proto文件有指向Go项目中特定目录的go_package选项。

代码语言:javascript
复制
syntax = "proto3";
option go_package = "github.com/myuser/myrepo/internal/core/services/grpcprotocol";
...

使用grpc_grpc.pb.go,我可以在内部/核心/域目录中生成grpc.pb.go文件,在内部/core/services/grpcprotocol目录中生成文件。

但是,grpc.pb.go有一个名为grpcprotocol的go包,而它应该有一个名为domain的包(我还使用在单独的Go文件中定义的其他类型)。另外,grpc_grpc.pb.go文件的代码使用在grpc.pb.go中定义的类型,而不需要导入(它把它当作是在同一个包中定义的)。

是否有可能将这两个文件分割成单独的Go包,并强制grpc_grpc.pb.go中的代码从域目录导入类型,而不是按照在同一个包中定义的那样对待它们?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-21 00:01:50

这里最好的解决方案是将grpcprotocol中想要的代码和想要放入domain中的代码分离到单独的文件中。例如:

domain.proto

代码语言:javascript
复制
syntax = "proto3";
package domain;
option go_package = "github.com/myuser/myrepo/internal/core/domain";

//...

grpc.proto

代码语言:javascript
复制
syntax = "proto3";
package grpcprotocol;
option go_package = "github.com/myuser/myrepo/internal/core/services/grpcprotocol";

//...

然后,您可以在domain.proto中导入grpc.proto,只需编写import "domain.proto";,如果domain.protogrpc.proto不在同一目录中,则提供--proto_path。最后,要在domain.proto中引用grpc.proto中的对象,可以编写:

代码语言:javascript
复制
domain.AnObject

之后,您可以利用--go_opt=module--go-grpc_opt=module,去掉go_package中的模块名,并在正确的位置生成代码。比如:

代码语言:javascript
复制
protoc --go_out=. --go_opt=module=github.com/myuser/myrepo --go-grpc_out=. --go-grpc_opt=module=github.com/myuser/myrepo *.proto

这将做的是,它将从每个go_package中删除go_package,并且基本上从模块的根开始。这就是为什么你可以做一个--go_out=.--go-grpc_out=.

希望这能有所帮助,让我知道如何才能进一步完善我的答案。

备注

  • Protobuf包和go_package并不相同。前者仅用于提供上下文,并扩展了限定名。在go代码生成过程中使用go_package
  • proto文件中的package是可选的,它使事情变得更清楚,没有人可以在不指定完全限定名的情况下误用proto文件(如果命名正确,则稍微安全一些)。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71944360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档