1 回答
TA贡献1765条经验 获得超5个赞
你最好的解决方案是将你想要的代码和你想要的代码分开grpcprotocol到domain单独的文件中。如:
域.proto
syntax = "proto3";
package domain;
option go_package = "github.com/myuser/myrepo/internal/core/domain";
//...
grpc.proto
syntax = "proto3";
package grpcprotocol;
option go_package = "github.com/myuser/myrepo/internal/core/services/grpcprotocol";
//...
然后你可以导入你domain.proto的grpc.proto,通过简单地写import "domain.proto";,提供一个--proto_pathifdomain.proto并且grpc.proto不在同一个目录中。最后,要从domain.proto中引用一个对象,grpc.proto您可以这样写:
domain.AnObject
之后,您可以利用--go_opt=moduleand--go-grpc_opt=module去除模块名称go_package并在正确的位置生成代码。喜欢:
protoc --go_out=. --go_opt=module=github.com/myuser/myrepo --go-grpc_out=. --go-grpc_opt=module=github.com/myuser/myrepo *.proto
这将做的是,它将github.com/myuser/myrepo从每个中删除go_package并基本上从模块的根开始。这就是为什么你可以做一个--go_out=.and --go-grpc_out=.。
希望有帮助,让我知道如何进一步改进我的答案。
笔记
和protobuf的封装
go_package
是不一样的。前者仅用于 protobuf 以提供上下文,它扩展了限定名称。在go_package
go 代码生成期间使用。proto 文件中的
package
是可选的,它使事情更清楚,没有人可以在不指定完全限定名称的情况下滥用您的 proto 文件(如果命名正确,会更安全一些)。
- 1 回答
- 0 关注
- 109 浏览
添加回答
举报