【问题标题】:Missing imports after compiling gRPC .proto file for GO using GoLand使用 GoLand 为 GO 编译 gRPC .proto 文件后缺少导入
【发布时间】:2021-07-22 21:52:32
【问题描述】:

我正在尝试从 gRPC 书籍中找出示例,但我很难弄清我所做的事情有什么问题。

我有一个 .proto 文件,我可以将它编译到 .pb.go 存根中。

我正在尝试构建客户端和服务器,文件夹结构如下所示:

我成功运行了这些命令,并为客户端和服务器生成了 .pb.go 文件,所以没有问题:

service % protoc -I ecommerce ecommerce/product_info.proto --go_out=plugins=grpc:./ecommerce

client % protoc -I ecommerce ecommerce/product_info.proto --go_out=plugins=grpc:./ecommerce

然而,虽然服务器的 go 文件可以解析所有的导入,但同样的情况不会发生在客户端。

查看文件夹结构,我预计一切都会好起来(我这周刚开始使用 go 和 gRPC,所以请理解)。

我的 IDE 是 GoLand,我怀疑路径有问题,但我现在不知道从哪里开始。

【问题讨论】:

  • 您是否尝试过同步依赖操作(Option/Alt+Enter 在红色导入语句上)?
  • 您的clientgo.mod 在哪里? (我可以在service 文件夹中看到一个,但在client 中看不到)。如果您没有更进一步的树,那么您可能需要在client 文件夹中运行go mod init [module-path](后跟go mod tidy)。
  • @Brits 谢谢,就是这样,客户端中缺少的 .mod 文件。应该把这个作为答案,这样我就可以投票了。
  • 请考虑阅读本文以备将来的问题stackoverflow.com/help/how-to-ask

标签: go grpc goland


【解决方案1】:

根据 cmets,屏幕截图在 service 中显示 go.mod,但在 client 中没有。由于 goland 将在启用“Go Modules Integration”的情况下运行,因此它需要一个模块(我强烈建议使用模块!)。

最简单的修复方法是在客户端文件夹中运行go mod init [module-path](后跟go mod tidy)。您也可以在backend 文件夹(或productinfo 文件夹)中建立一个模块,该模块将由子文件夹共享。

【讨论】:

    猜你喜欢
    • 2020-01-03
    • 1970-01-01
    • 2020-04-09
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多