出现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;
}