import proto not found的问题
出现not found的原因
import其它的 proto时,如果没有设置 --proto_path这个参数,那么当下执行命令的路径会被当做寻找 proto文件的根目录。如果设定的的话,会以设定的路径当做目录开始寻找,该参数可以设置多次。
如何设置proto_path
通过 --proto_path设置。下面是设置当前目录为寻找 proto文件的目录。
protoc --proto_path=. --go_out=. ./post/post.proto
通过 -I设置,-I是 --proto_path的别名。下面是设置当前目录为寻找 proto文件的目录。
protoc -I . --go_out=. ./post/post.proto
如何正确的写import路径
import其它的 proto时最好都是以 proto_path作为根目录开始指定。
例子
以下为 proto文件的目录结构。

在 post.proto文件中 import category.proto。
import "category/category.proto";
设置的 proto_path为 .目录。
protoc -I . --go_out=. ./post/post.proto
import同个文件夹下的proto
以下为 proto文件的目录结构。

在 post.proto文件中 import category.proto。
import "category/category.proto";
设置的 proto_path为 .目录。
protoc -I . --go_out=. ./categry/post.proto
import不同文件夹下的proto
以下为 proto文件的目录结构。

在 post.proto文件中 import category.proto。
import "category/category.proto";
设置的 proto_path为 .目录。
protoc -I . --go_out=. ./post/post.proto
import google提供的proto
注意:import google 提供的 proto时,需要指定 google提供的 proto文件的路径。否则会出现 not found的问题。
如何指定
首先要下载 google提供的 proto文件。
go get github.com/protocolbuffers/protobuf
设置 google提供的 proto文件的 proto_path。一般在 ${GOPATH}\src\github.com\protocolbuffers\protobuf\src下。
protoc -I D:\GoPath\pkg\mod\github.com\protocolbuffers\protobuf@v4.25.2+incompatible\src -I . --go_out=. ./post/post.proto
post.proto文件的内容如下。
syntax = "proto3";
package proto;
option go_package = "/post;post";
import "category/category.proto";
import "google/protobuf/timestamp.proto";
message Post {
uint64 id = 1;
string name = 2;
Category category = 3;
google.protobuf.Timestamp created_at = 4;
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: