从不同文件导入 proto

Arn*_*nob 5 protocol-buffers

我将所有原始文件保存在一个文件夹中。概述:

protos
|
|__auth
|
|__some_other
Run Code Online (Sandbox Code Playgroud)

里面的auth目录我有auth_service.proto user.proto等。

但我在导入定义表单时遇到问题user.proto

auth_service.proto

syntax="proto3";

package auth;

import "auth/user.proto"; // Import "auth/user.proto" was not found or had errors.

message SomeMessage {
  User user = 1; // user is not defined
}
Run Code Online (Sandbox Code Playgroud)

user.proto 具有相同的包名:

syntax="proto3";

package auth;

message User{}
Run Code Online (Sandbox Code Playgroud)

协议版本:libprotoc : 3.19.4

Daz*_*kin 2

这可能很棘手。

考虑它的一种方法是,您需要确定导入路径的根,然后原型导入是相对于它的。

假设${PWD}是 的父级protos

示例#1:

如果您使用${PWD}作为proto_path

protoc \
--proto_path=${PWD} \
--go_out=${PWD} \
  ${PWD}/protos/auth/auth_service.proto \
  ${PWD}/protos/auth/user.proto
Run Code Online (Sandbox Code Playgroud)

那么导入应该是import "protos/auth/user.proto";

示例#2:

如果您使用protos作为proto_path

protoc \
--proto_path=${PWD}/protos \
--go_out=${PWD} \
  ${PWD}/protos/auth/auth_service.proto \
  ${PWD}/protos/auth/user.proto
Run Code Online (Sandbox Code Playgroud)

那么导入应该是import "auth/user.proto";.

注意在所有情况下,proto文件引用必须以(之一)a 为前缀proto_path

settings.json

"protoc": {
    "path": "${workspaceRoot}/protoc-21.2-linux-x86_64/bin/protoc",
    "compile_on_save": true,
    "options": [
        "--proto_path=${workspaceRoot}/protoc-21.2-linux-x86_64/include",
        "--proto_path=${workspaceRoot}/protos",
        "--go_out=${workspaceRoot}"
    ]
}
Run Code Online (Sandbox Code Playgroud)