我有 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 文件,我似乎找不到任何解决方案