如何解决validator.proto文件未找到及相关导入错误?
解决方案
问题根源
validator.proto需要导入google/protobuf/descriptor.proto,但你的protoc编译命令未指定该文件的搜索路径,导致依赖无法找到,进而引发后续的FieldOptions、OneofOptions未定义错误。
修复步骤
定位
descriptor.proto的所在目录
执行以下命令查找文件位置:find ${GOPATH} -name descriptor.proto通常会得到类似路径:
/usr/local/pkg/mod/google.golang.org/protobuf@v1.30.0/types/descriptorpb/google/protobuf/descriptor.proto取该路径中
google目录的父目录,即/usr/local/pkg/mod/google.golang.org/protobuf@v1.30.0/types/descriptorpb(注意替换版本号为你实际找到的版本)修改protoc编译命令
在原命令的--proto_path参数列表中,添加上述找到的目录。修改后的命令如下:protoc --go_out=. \ --proto_path=${GOPATH}/src \ --proto_path=${GOPATH}/src/github.com/gogo/protobuf/gogoproto/ \ --proto_path=${GOPATH}/src/github.com/mwitkow/go-proto-validators/ \ --proto_path=/usr/local/pkg/mod/google.golang.org/protobuf@v1.30.0/types/descriptorpb \ --proto_path=. \ --go_opt=paths=source_relative \ --go-grpc_out=. \ --go-grpc_opt=paths=source_relative \ --govalidators_out=. \ --govalidators_opt=paths=source_relative \ pkg/test/test.proto备选方案(系统级protobuf库)
如果你的系统安装了protobuf开发包(比如通过apt install libprotobuf-dev或brew install protobuf),可以直接添加系统默认的protobuf头文件路径:protoc --go_out=. \ --proto_path=${GOPATH}/src \ --proto_path=${GOPATH}/src/github.com/gogo/protobuf/gogoproto/ \ --proto_path=${GOPATH}/src/github.com/mwitkow/go-proto-validators/ \ --proto_path=/usr/include \ --proto_path=. \ --go_opt=paths=source_relative \ --go-grpc_out=. \ --go-grpc_opt=paths=source_relative \ --govalidators_out=. \ --govalidators_opt=paths=source_relative \ pkg/test/test.proto
验证
重新执行修改后的命令,若不再出现Import "google/protobuf/descriptor.proto" was not found相关错误,即说明修复成功。
内容的提问来源于stack exchange,提问作者Prems
相关产品推荐
相关产品推荐

