我有 2 个相互交互的 grpc 服务(和service1)service2,在某些情况下,service1将的 rpc 响应包含一个定义在service2管理,所以我现在将原始文件重组为这样的东西
.
├── app
...
├── proto
│ ├── service1
│ │ ├── service1.access.proto
│ │ ├── service1.proto
│ ├── service2
│ │ ├── service2.access.proto
│ │ └── service2.proto
│ └── model
│ ├── model.service1.proto
│ └── model.service2.proto
└── proto-gen // the protoc generated files
├── service1
│ ├── service1.access.pb.go
│ └── service1.pb.go
├── service2
│ ├── service2.access.pb.go
│ └── service2.pb.go
└── model
├── model.service1.pb.go
└── model.service2.pb.go
service1需要导入模型定义model/model.service2.proto,所以我像这样导入它
import "model/model.service2.proto";
option go_package = "proto-gen/service1";
.pb.go我使用这个protoc命令生成文件
ls proto | awk '{print "protoc --proto_path=proto proto/"$1"/*.proto --go_out=plugins=grpc:."}' | sh
该命令生成的.pb.go文件很好,但是上面的代码service1.access.pb.go似乎没有正确导入模型,我不知道它是否相关但是当我运行应用程序时,它会抛出这个错误
cannot load model: malformed module path "model": missing dot in first path element
我现在花了几个小时在谷歌上搜索如何正确导入另一个 proto 文件,我似乎找不到任何解决方案