.proto 文件中 import 其他 .proto 文件时的注意事项

.proto 文件中 import 其他 .proto 文件时的注意事项

import 的文件路径,必须要能在 -I(–proto_path)的路径下找到对应文件。且 import 不能出现 /…/ 这种。
举例:

---my_project
   |---protocol
       |---aaa
       |   |---aaa.proto
       |---bbb
           |---bbb.proto

aaa.proto 不需要依赖其他文件,文件内容是这样:

syntax = "proto3";
package aaa;
option go_package = "my_project/protocol/aaa";

message Something {
  string msg = 1;
}

bbb.proto 需要依赖 aaa.proto 中的 Something:

syntax = "proto3";
package bbb;
option go_package = "my_project/protocol/bbb";
import "aaa/aaa.proto";

message Something2 {
  aaa.Something something = 1;
}

虽然会报红但是不用管,生成 pb.go 的时候,假设当前在 my_project/protocol/bbb 目录下,则执行

protoc \
-I=. \
-I=./.. \
--go_out=. \
--go_opt=paths=source_relative \
--go-grpc_out=. \
--go-grpc_opt=paths=source_relative \
*.proto

这样 protoc 可以在 -I path + import path => “./…/aaa/aaa.proto” 路径下找到 aaa.proto 这个文件。
当然也可以 import “aaa.proto”,-I=./…/aaa,同样可以执行成功。


版权声明:本文为Canon_in_D_Major原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。