Protoc生成的GRPC文件和网关文件以不同的路径结束? [英] protoc generated grpc files and gateway files end up in different paths?
本文介绍了Protoc生成的GRPC文件和网关文件以不同的路径结束?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我对此有点不解。文件结构:
/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
,它才会像其他生成的GRPC文件一样在/pkg/gatewaypb
中结束?
我的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: "*"
};
}
}
推荐答案
根据注释,您在生成协议buf&;GRPC文件时使用了模块选项(--go_opt=module=${module}
&;--go-grpc_opt=module=${module}
)。生成网关文件(--grpc-gateway_opt paths=source_relative
)时使用的选项使用不同的算法来确定文件的存储位置;修复方法是使用模块选项---grpc-gateway_opt module=${module}
。
以下是the docs对这三个选项的看法(这些特定选项用于协议缓冲区生成;其他生成器具有相同的功能,但将go_
替换为go-grpc_
/grpc-gateway_
):
- 默认情况下,输出文件放在以GO包的导入路径命名的目录中。例如,带有上述go_package选项的文件pros/foo.proto将生成一个名为example.com/foo/bar/foo.pb.go的文件。
- 如果为proc提供了--go_opt=module=$prefix标志,则会从输出文件名中删除指定的目录前缀。例如,带有go_package选项";example.com/foo/bar";和标志--go_opt=module=example.com/foo的文件Protos/foo.proto将生成名为bar/foo.pb.go的文件。
- 如果为proc提供了--go_opt=path=source_Relative标志,则输出文件与输入文件放置在相同的相对目录中。例如,文件pros/foo.proto将生成一个名为Protos/foo.pb.go的文件。
这篇关于Protoc生成的GRPC文件和网关文件以不同的路径结束?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文