首页 > 解决方案 > 导入 proto 文件并编译

问题描述

我在以下目录中有两个原始文件 -

parsers/
   > flights/
       > flights_proto/
           > flights.proto
           > flights.pb.go
   > flightspostbooking
       > flights_postbooking_proto/
           > flights_postbooking.proto
           > flights_postbooking.pb.go

以下是 proto 文件的内容 -

flights.proto
=============

package "flights_proto";

message Flight {
   ...
}

flights_postbooking.proto
=========================

package "flights_postbooking_proto"
import "flights_proto/flights.proto"

message Cancel {
    Flight flight = 1;
    ...
}

我无法弄清楚如何编译flights_postbooking.proto生成pb.go文件。

我尝试从parsers目录中执行以下操作。

protoc --proto_path=flightspostbooking/flights_postbooking_proto --proto_path=flights/flights_proto flightspostbooking/flights_postbooking_proto/flights_postbooking.proto --go_out=plugins:flights_postbooking_proto

但我得到一个错误flights_proto/flights.proto: File not found

标签: goprotocol-buffers

解决方案


protoc从目录运行parsers,并使用原始文件的基本目录,即.

protoc --proto_path=. --go_out=plugins=grpc:flightpostbooking/flights_postbooking_proto flightpostbooking/flights_postbooking_proto/flights_postbooking.proto

由于您将parsers目录作为基础,因此您的导入应该是:

import "flights/flights_proto/flights.proto"

关键是使用相对于您的proto_path.


推荐阅读