Protobuf 中的相对导入

问题描述 投票:0回答:1

文件夹结构

服务.proto

` 语法=“proto3”;

package service;
option go_package = "../../../proto-generated/user/service";

import "user/models/models.proto";


service UserService {
  rpc CreateUser(models.CreateUserRequest) returns (models.CreateUserResponse);
  rpc GetUser(models.GetUserRequest) returns (models.GetUserResponse);
}

`

模型.proto ` 语法=“proto3”;

package models;
option go_package = "../../../proto-generated/user/models";

message CreateUserRequest {
  string username = 1;
  int32 age = 2;
}

message CreateUserResponse {
  int32 id = 1;
}

message GetUserRequest {
  int32 id = 1;
}

message GetUserResponse {
  int32 id = 1;
  string username = 2;
  int32 age = 3;
}

`

我尝试使用创建原型文件 协议-I=. --go_out=.模型.proto 和 协议-I=. --go-grpc_out=.服务.proto

进入各自的目录, 模型原型已成功创建,因为它不包含任何导入

但是服务生成失败 错误:user/models/models.proto:找不到文件。

go protocol-buffers protocols
1个回答
0
投票

您不在 Protocol Buffers 中进行相对导入。

导入定义

协议编译器在一组中搜索导入的文件 使用协议编译器命令行指定的目录

-I
/
--proto_path
标志。如果没有给出标志,它会在 调用编译器的目录。一般来说你应该设置 将
--proto_path
标志添加到项目的根目录并充分使用 所有导入的限定名称

另请参阅

Go 生成代码指南中的“编译器调用”。

此外,来自“

2023 年 4 月 20 日宣布的协议缓冲区变更”:

这是一个用户错误:每个导入都应始终由 一致的完整路径。

© www.soinside.com 2019 - 2024. All rights reserved.