首页 > 解决方案 > 从不同的包导入 proto 文件

问题描述

我有两个服务:故事和标签。这些文件的结构如下:

Story
|-- StoryService
|   `-- proto
|       `-- storyservice.proto
`-- TagService
    `-- proto
        `-- tagservice.proto

每个.proto文件都需要使用来自另一个文件的消息。如何将它们相互导入?我试过import "StoryService/proto/storyservice.proto"了,但没有用。

标签: grpcprotoc

解决方案


如果使用protoc,则导入指令的所有搜索路径都应相对于-I( --proto_path) 参数中列出的文件夹之一。例如,如果您运行protoc -I/path/to/Story --go_out=out StoryService/proto/storyservice.proto,它将能够导入TagService/proto/tagservice.proto(因为它的路径是相对于Story中列出的文件夹-I)。

话虽如此,您实际上并不需要让每个 proto 文件都导入另一个。递归 proto 文件导入不适用于类似于此的错误消息:

a.proto: File recursively imports itself: a.proto -> b.proto -> a.proto

推荐阅读