【发布时间】:2021-05-16 04:31:57
【问题描述】:
我对此有点困惑。文件结构:
/Project
generate.sh
gateway/
cmd/
main.go
pkg/
gatewaypb/
proto/
service.proto
我的generate.sh 显示如下:
set -e
module="github.com/my-org/grpc-project"
// Find all dirs with .proto files in them
for proto in */proto; do
dir=$(echo "$proto"|cut -d"/" -f1)
echo "regenerating generated protobuf code for ${proto}"
protoc --proto_path .\
--go-grpc_out=. --go-grpc_opt=module=${module}\
--go_out=. --go_opt=module=${module}\
"${proto}"/*.proto
echo "creating reverse proxy protobuf code for ${proto}"
protoc -I . --grpc-gateway_out=.\
--grpc-gateway_opt logtostderr=true \
--grpc-gateway_opt paths=source_relative \
"${proto}"/*.proto
done
正确地说,第一个protoc 符合预期,而第二个则没有。当它们应该在相同的路径中时,它们会以不同的路径输出文件。
运行generate.sh 后,我剩下:
/Project
generate.sh
Service/
cmd/
main.go
pkg/
gatewaypb/
*gateway.pb.go
*gateway._grpc.pb.go
proto/
*gateway.pb.gw.go
service.proto
为什么生成的网关文件最终会出现在proto/ 目录中?
我需要为grpc-gateway-out 提供什么值才能使其在/pkg/gatewaypb 中作为其他生成的grpc 文件结束?
我的service.proto 文件:
syntax = "proto3";
package gateway.api.v1;
option go_package = "github.com/my-org/grpc-project/gateway/pkg/gatewaypb";
import "google/api/annotations.proto";
message StringMessage {
string value = 1;
}
service YourService {
rpc Echo(StringMessage) returns (StringMessage) {
option (google.api.http) = {
post: "/v1/example/echo"
body: "*"
};
}
}
【问题讨论】:
-
试试
--grpc-gateway_opt module=${module}(替换--grpc-gateway_opt paths=source_relative)。这样做应该意味着使用与其他插件相同的逻辑(this issue 中的更多信息)。 -
成功了,非常感谢!欢迎您提出合理的答案,我会确保接受它!
标签: go protocol-buffers grpc protoc