import proto not found的问题

25次阅读

共计 1406 个字符,预计需要花费 4 分钟才能阅读完成。

出现 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 文件的目录结构。

import proto not found 的问题

post.proto 文件中 importcategory.proto

import "category/category.proto";

设置的 proto_path. 目录。

protoc -I . --go_out=. ./post/post.proto

import 同个文件夹下的 proto

以下为 proto 文件的目录结构。

import proto not found 的问题

post.proto 文件中 importcategory.proto

import "category/category.proto";

设置的 proto_path. 目录。

protoc -I . --go_out=. ./categry/post.proto

import 不同文件夹下的 proto

以下为 proto 文件的目录结构。

import proto not found 的问题

post.proto 文件中 importcategory.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;
}
正文完
 
dkp
版权声明:本站原创文章,由 dkp 2024-01-25发表,共计1406字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。