V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
jayn1985
V2EX  ›  Go 编程语言

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

  •  
  •   jayn1985 · 2019-08-27 17:52:11 +08:00 · 6032 次点击
    这是一个创建于 1949 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位好,这两天一直在看 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 文件

    6 条回复    2022-04-17 21:50:22 +08:00
    mingqing
        1
    mingqing  
       2019-08-27 18:32:52 +08:00
    这跟 grpc-gateway 没关系,你没设置好 proto 的搜索路径,如:protoc -I./path/find/name.proto xxxxx,建议看下 protoc 的用法
    xsephiroth
        2
    xsephiroth  
       2019-08-27 18:34:33 +08:00 via Android
    记得是要在 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
        3
    jayn1985  
    OP
       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
        4
    jayn1985  
    OP
       2019-08-27 18:50:26 +08:00
    @mingqing 我刚才试了:protoc -I. -I$GOPATH/pkg/mod/github.com/grpc-ecosystem/[email protected]/third_party/googleapis --grpc-gateway_out=logtostderr=true:. gateway.proto,这样就可以了,确实是需要指定 proto 文件的完整路径才行,但是我的问题是,其实 [email protected] 同级目录下还有别的版本的包,如果在实际项目多人协作开发过程中,这么指定目录不会有问题么,以后升级了这个包咋办?
    sailei
        5
    sailei  
       2020-04-01 19:35:41 +08:00
    @jayn1985 请问你是怎么解决的呀? 我 go 新手 也遇到这个问题了!
    hzzhzzdogee
        6
    hzzhzzdogee  
       2022-04-17 21:50:22 +08:00
    @sailei #5

    @jayn1985 #3

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

    推荐使用官方的 buf 工具生成 stub
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   973 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 22:03 · PVG 06:03 · LAX 14:03 · JFK 17:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.