在学习 grpc-gateway 中,有个困扰了半天的问题求助

2019-08-27 17:52:11 +08:00
 jayn1985

各位好,这两天一直在看 grpc 相关的东西,然后 API 网关这块顺便了解了下 grpc-gateway,但是在看官方的例子中,gateway.proto 文件如下:

syntax = "proto3";

package gateway;

import "google/api/annotations.proto";

message Message {
    string msg = 1;
}

service Gateway {
    rpc Echo (Message) returns (Message) {
        option (google.api.http) = {
            post: "/api/v1/echo"
            body: "*"
        };
    }
}

之前已经顺利安装了 protoc-gen-grpc-gateway 插件,但是在执行如下语句:

protoc --grpc-gateway_out=logtostderr=true:. gateway.proto

老是提示如下的错误:

google/api/annotations.proto: File not found.
gateway.proto: Import "google/api/annotations.proto" was not found or had errors.

希望有熟悉的大佬们,麻烦帮忙解答下,如何安装这个缺失的 proto 文件

6028 次点击
所在节点    Go 编程语言
6 条回复
mingqing
2019-08-27 18:32:52 +08:00
这跟 grpc-gateway 没关系,你没设置好 proto 的搜索路径,如:protoc -I./path/find/name.proto xxxxx,建议看下 protoc 的用法
xsephiroth
2019-08-27 18:34:33 +08:00
记得是要在 libs 里,忘记了

docker 直接来 namely/protoc-all

e.g.
docker run --rm \
--user 1000:1000 \
-v $PWD/proto:/defs \
namely/protoc-all \
-l go \
-d /defs \
-o /defs \
--with-gateway
jayn1985
2019-08-27 18:44:30 +08:00
@mingqing 感谢提醒,我也注意到了这个问题,我看官方文档里设定的搜索路径是这些:-I/usr/local/include -I. -I$GOPATH/src -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis,但是我的项目开启了 go mod 模式,$GOPATH/src 下面并没有这个包,倒是在$GOPATH/pkg/mod/xxxx 相应的目录下面才有。。。然而这个目录页面也是有多个 grpc-gateway 版本的,所以感觉这么写是不是有问题?
jayn1985
2019-08-27 18:50:26 +08:00
@mingqing 我刚才试了:protoc -I. -I$GOPATH/pkg/mod/github.com/grpc-ecosystem/grpc-gateway@v1.9.6/third_party/googleapis --grpc-gateway_out=logtostderr=true:. gateway.proto,这样就可以了,确实是需要指定 proto 文件的完整路径才行,但是我的问题是,其实 grpc-gateway@v1.9.6 同级目录下还有别的版本的包,如果在实际项目多人协作开发过程中,这么指定目录不会有问题么,以后升级了这个包咋办?
sailei
2020-04-01 19:35:41 +08:00
@jayn1985 请问你是怎么解决的呀? 我 go 新手 也遇到这个问题了!
hzzhzzdogee
2022-04-17 21:50:22 +08:00
@sailei #5

@jayn1985 #3

手动 Protoc 生产 grpc-gateway 的 stub 的话, 也要手动把 googleapis 几个文件引入

推荐使用官方的 buf 工具生成 stub

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/595614

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX