【问题标题】:Import "google/api/annotations.proto" was not found or had errors. How do I add it as a dependency?未找到导入“google/api/annotations.proto”或出现错误。如何将其添加为依赖项?
【发布时间】:2021-02-12 08:14:24
【问题描述】:

按照how to set up a gRPC gateway 上的文档,我发现自己陷入了生成 grpc 网关的第四步。

也就是说,当添加以下行时,事情就崩溃了:

import "google/api/annotations.proto";

文档说You will need to provide the required third party protobuf files to the protoc compiler - 但实际上并没有说明如何这样做。

如何将google/api/annotations.proto 添加为依赖项?

【问题讨论】:

    标签: go protocol-buffers grpc


    【解决方案1】:

    我通过将third party google apis 及其内容添加到我的项目的根目录来解决它。

    感觉不对,但显然这是is encouraged

    【解决方案2】:

    我遇到了同样的问题,我按照这个结构解决了它:

    proto
    ├── google
    │   └── api
    │       ├── annotations.proto
    │       └── http.proto
    └── helloworld
        └── hello_world.proto
    

    然后运行命令:

    protoc -I ./proto \
       --go_out ./proto --go_opt paths=source_relative \
       --go-grpc_out ./proto --go-grpc_opt paths=source_relative \
       --grpc-gateway_out ./proto --grpc-gateway_opt paths=source_relative \
       ./proto/helloworld/hello_world.proto
    

    【讨论】:

    • 你手动从 grpc 仓库下载了那些 google 的 proto 文件吗?
    • 如果您的项目根目录中没有“google/api”目录并且您正在以另一种方式管理它,这一点很重要。
    【解决方案3】:

    我只复制 annotations.proto 和 http.proto 就解决了 在主原型中:

    import "Proto/google/api/annotations.proto";
    

    以及在 annotations.proto 中

    import "Proto/google/api/http.proto";
    

    我的文件夹如下所示:

    【讨论】:

    • 对我不起作用
    【解决方案4】:

    如果您使用 protoc 生成存根,则需要确保 所需的依赖项在编译时可供编译器使用。 这些可以通过手动克隆和复制相关文件找到 来自googleapis repository,并在何时将它们提供给 protoc 跑步。您需要的文件是:

    google/api/annotations.proto
    google/api/field_behaviour.proto
    google/api/http.proto
    google/api/httpbody.proto
    

    来自grpc-gateway

    例如在项目根目录中运行 git submodule add https://github.com/googleapis/googleapis获取实际版本

    【讨论】:

      【解决方案5】:

      protoc 版本在 bin 旁边的目录(libinclude)中包含这些 well-known types(在 Linux 上)。

      您不需要克隆|将它们复制到任何地方(其他),IIRC protoc 甚至不需要在目录中添加单独的 proto_path 标志来为导入它们的原型生成代码

      Google 还在 Golang Protobuf SDK 中提供知名类型的包:

      https://pkg.go.dev/google.golang.org/protobuf/types/known

      可以这么说,在 Linux 上,使用 protoc 按原样发布,您应该能够为这些类型添加导入,而无需更改您的 protoc 命令和 go mod tidy && go build ...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-27
        • 1970-01-01
        • 2020-12-08
        • 1970-01-01
        • 2012-03-10
        • 2021-12-18
        • 1970-01-01
        相关资源
        最近更新 更多