我在编译.proto文件时遇到问题。希望从.proto文件生成REST端点。以下是代码和错误: syntax =“proto3”;
package pb;
import "google/protobuf/empty.proto";
import "google/api/annotations.proto";
service UrlShortener {
rpc Hello(HelloRequest) returns (HelloResponse);
rpc Encrypt(EncryptRequest) returns (EncryptResponse);
rpc Decrypt(DecryptRequest) returns (DecryptResponse) {
option (google.api.http) = {
get: "/{hash}"
};
}
}
message HelloRequest {
string Name = 1;
}
message HelloResponse {
string Message = 1;
}
message EncryptRequest {
string OriginalUrl = 1;
}
message EncryptResponse {
UrlMap ResponseMap = 1;
}
message DecryptRequest {
string hash = 1;
}
错误: github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis:warning:目录不存在。 google / api / annotations.proto:找不到文件。 urlshortener.proto:未找到导入“google / api / annotations.proto”或有错误。
请帮助修复此问题。
我试过了:去-u github.com/grpc-ecosystem/grpc-gateway 但它没有说:路径中没有可构建的源文件。
答案 0 :(得分:0)
我认为你的定义中有多个错误
您在定义的最开始处缺少语法版本:
syntax = "proto3";
有一些未定义的类型
service.proto:32:3: "UrlMap" is not defined.
service.proto:12:40: "DecryptResponse" is not defined.
您正在导入和未使用的empty.proto
您可以使用
中的googleapies{GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis
然后使用:
运行protoc -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis -I/usr/local/include -I. service.proto --go_out=plugins=grpc:.
我进行了以前的更改并进行了编译,因此我有了service.pb.go文件
<强>编辑:强>
看看这个grpc网关,也许可以帮到你 https://github.com/grpc-ecosystem/grpc-gateway
答案 1 :(得分:0)
找到解决方案:问题是google / api / annotations已从早期路径grpc-ecosystem / grpc-gateway / third_party / googleapis移至https://github.com/grpc-ecosystem/grpc-gateway/tree/master/third_party/googleapis/google/api。
运行以下内容解决了错误:go get -u github.com/grpc-ecosystem/grpc-gateway / ...