当前位置: 首页 > 知识库问答 >
问题:

尝试从不同目录导入proto文件时未找到proc文件错误

公羊凌
2023-03-14

无法弄清楚为什么我得到一个文件未找到错误,当我运行一个协议命令来生成相关的go文件。

问题:在尝试从不同目录导入原型文件时,试图找出合适的原型命令是什么。我在GoLand中将原型路径设置为~/go-workspace/github.com/xyz/project/internal

结构

project
  - internal  
    - song
      - proto 
        - *.proto 
    - search
      - proto 
        - *.proto 

歌曲原型

syntax = "proto3";
package song;

option go_package = "github.com/xyz/project/internal/song/proto";
......

Search.proto

syntax = "proto3";
package search;

option go_package = "github.com/xyz/project/internal/search/proto";

import "song/proto/song.proto";


创建文件:

generate:
     protoc --go_out=. --go_opt=paths=source_relative \
         --go-grpc_out=. --go-grpc_opt=paths=source_relative \
         proto/*.proto

错误:

song/proto/song.proto: File not found.
proto/search.proto:6:1: Import "song/proto/song.proto" was not found or had errors.
proto/search.proto:16:12: "song.Song" is not defined.
proto/search.proto:20:12: "song.Artist" is not defined.

共有1个答案

段成益
2023-03-14

如注释中所述,您可以将-proto_path-我选项与原型编译器一起使用,并且您需要从内部开始导入。

我可以看到的另一个不需要多个Makefiles的解决方案是在项目级别放置以下Makefile:

generate:
    protoc --go_out=. \
    --go_opt=module=github.com/xyz/project \
    internal/search/proto/*.proto \
    internal/song/proto/*.proto

请注意--go\u opt=module,它将修剪包名并帮助您在相应的proto目录中生成protobuf代码,请注意,我正在将整个路径传递给proto目录。

然后搜索。原型:

syntax = "proto3";

package search;

option go_package = "github.com/xyz/project/internal/search/proto";

import "internal/song/proto/song.proto";
 类似资料:
  • 我一直在尝试运行以下命令 获取以下错误 github。com/x/customValidation/validators。proto:找不到文件。test\u服务器/测试。proto:5:1:Import“github.com/x/customValidation/validators.proto”未找到或有错误。 我可以看到原始文件在这个位置- 我还尝试了使用--proto\u path命令,但

  • 问题内容: 这是我正在使用的结构: 我想要做的就是在script.py中定义的类进口和。如果我做: 对于中定义的类,它工作正常。但是使用此解决方案时,如果在不同文件中定义了许多类,并且我想导入所有这些类,则必须为每个文件键入一行。必须有一个捷径。我试过了: 但这没有解决。 编辑 :这是文件的内容: 这是(按照Apalala的建议使用): 这是: 这是: 这是: 这是我尝试运行时得到的跟踪: 问题答

  • <代码>协议--gogofaster\u out=。形象协议 我收到此错误消息 /主页/abc/src/github。com/gogo/protobuf/gogoproto/gogo。proto:找不到文件。 形象proto:Import“/主页/abc/src/github.com/gogo/protobuf/gogoproto/gogo.proto”未找到或有错误。 文件肯定在那里。我可以从错

  • 问题内容: 我有以下文件夹结构。 我想从位于另一个Python文件中的导入一些功能 我试过了 和其他一些尝试,但到目前为止,我无法正确导入。我怎样才能做到这一点? 问题答案: 默认情况下,你不能这样做。导入文件时,Python仅搜索当前目录,入口点脚本运行所在的目录,并且包括诸如软件包安装目录之类的位置(实际上比这稍微复杂一点,但这涵盖了大多数情况) 。 但是,你可以在运行时添加到Python路径

  • 我正在写一个C程序,它需要Ext_auth。特使的原型-https://github.com/envoyproxy/envoy/blob/main/api/envoy/config/filter/http/ext_authz/v2/ext_authz.proto 如何将原始文件导入Bazel build?如何生成pb文件?

  • 我的原始文件使用默认的谷歌协议缓冲区类型,如结构和时间戳。 使用默认的gradle协议集成,gradle输出错误,因为它无法解决导入: google/protobuf/struct。proto:找不到文件。 google/protobuf/timestamp。proto:找不到文件。 替换默认的gradle协议块 其中一个指定protoc的位置 修复了该问题,但它不可移植。 是否有任何jar依赖项