在写proto文件生成pb文件脚本的时候,提示github.com/mwitkow/go-proto-validators/validator.proto: File not found。为了能够更清楚了解场景,先介绍一下项目文件目录,如下图所示。
下面选择protobuf-spec文件下,任意一个proto文件为例来做展示和说明问题。节选proto文件部分代码,代码如下:
syntax = "proto3";
package ofc.app;
import "google/protobuf/empty.proto";
import "github.com/mwitkow/go-proto-validators/validator.proto";
//添加应用
message AppRequest{
int64 cid = 1;
string appkey = 2;
// @inject_tag: v:"required#应用名不能为空"
string name = 3[(validator.field) = {string_not_empty: true}];
// @inject_tag: v:"required#行业类型不能为空"
string industry_type = 4[(validator.field) = {string_not_empty: true}];
string info = 5;
}
根据本机环境,编写script.sh脚本文件,根据proto生成pb文件:
# !bin/sh
proto_files=`find ./api/protobuf-spec -name "*.proto"`
for proto_file in ${proto_files[*]}
do
`protoc -I. \
-I$GOPATH/pkg/mod/github.com/mwitkow/go-proto-validators@v0.3.2 \
-I$GOPATH/pkg/mod/github.com/grpc-ecosystem/grpc-gateway@v1.14.6/third_party/googleapis \
--govalidators_out=./api/protobuf \
--go_out=plugins=grpc:./api/protobuf \
${proto_file}`
done
echo "success"
在执行script.sh的时候,提示github.com/mwitkow/go-proto-validators/validator.proto: File not found,如下图所示。
根据错误提示,第一反应就是go-proto-validators下载失败,进入文件目录查看,确实已经存在,排除了这个问题之后就更困惑了。既然存在问啥还提示这个错误呢?根据文件路径找到了validator.proto文件。
打开"github.com/mwitkow/go-proto-validators/validator.proto"文件,代码如下:
看到了import "google/protobuf/descriptor.proto";在文件系统中确实没有找见这个文件,查找相关资料找到了对应的项目。
git clone https://github.com/protocolbuffers/protobuf
将"https://github.com/protocolbuffers/protobuf/" 中的 src/google 文件夹移动到 $GOPATH/src/google/下面,并修改script.sh脚本,重新执行。
# !bin/sh
proto_files=`find ./api/protobuf-spec -name "*.proto"`
for proto_file in ${proto_files[*]}
do
`protoc -I. \
-I$GOPATH/src \
-I$GOPATH/pkg/mod/github.com/mwitkow/go-proto-validators@v0.3.2 \
-I$GOPATH/pkg/mod/github.com/grpc-ecosystem/grpc-gateway@v1.14.6/third_party/googleapis \
--govalidators_out=./api/protobuf \
--go_out=plugins=grpc:./api/protobuf \
${proto_file}`
done
echo "success"
验证结果,如下图所示:github.com/mwitkow/go-proto-validators/validator.proto: File not found问题消失。
对于go_package是另外一个问题,下一篇做详细介绍。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。