0

0

`go mod tidy` 抱怨 bazel 生成的 protobuf 包丢失

PHPz

PHPz

发布时间:2024-02-10 10:09:17

|

1520人浏览过

|

来源于stackoverflow

转载

`go mod tidy` 抱怨 bazel 生成的 protobuf 包丢失

php小编香蕉在处理编译错误时,有时会遇到"go mod tidy"命令抱怨bazel生成的protobuf包丢失的问题。这个问题的解决方法其实很简单,只需要在go.mod文件中手动添加对应的protobuf包依赖即可。通过执行"go mod tidy"命令来更新依赖关系,再次编译就不会出现包丢失的问题了。这个方法简单有效,能够帮助开发者快速解决编译错误,提高开发效率。

问题内容

我在目录中有一个 .proto protobuf 定义文件,我正在使用 bazel 从中构建一个 go 库,如下所示(下面使用 gazelle 生成的 build.bazel 文件):

load("@rules_proto//proto:defs.bzl", "proto_library")
load("@io_bazel_rules_go//go:def.bzl", "go_library")
load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")

proto_library(
    name = "events_proto",
    srcs = ["events.proto"],
    visibility = ["//visibility:public"],
    deps = ["@com_google_protobuf//:timestamp_proto"],
)

go_proto_library(
    name = "proto_go_proto",
    importpath = "github.com/acme/icoyote/proto",
    proto = ":events_proto",
    visibility = ["//visibility:public"],
)

go_library(
    name = "proto",
    embed = [":proto_go_proto"],
    importpath = "github.com/acme/icoyote/proto",
    visibility = ["//visibility:public"],
)

其他一些代码依赖于 //icoyote/proto:proto,当我在模块中运行 go mod tidy 时,它抱怨找不到包 github.com/acme/icoyote/proto: p>

go: finding module for package github.com/acme/icoyote/proto
github.com/acme/icoyote/cmd/icoyote imports
        github.com/acme/icoyote/proto: no matching versions for query "latest"

任何没有 bazel 集成的 ide(例如 vscode、没有 bazel 插件的 goland/intellij)也会抱怨

我该怎么办?

解决方法

之所以发生这种情况,是因为 bazel 确实使用 protocbuild 文件中的 go_proto_library 规则下生成 .go 文件,但仅将它们写到 bazel 下的临时目录中 - bingo_library 规则使用,并且 go mod tidy 似乎没有研究 bazel-bin (可能是因为它是一个符号链接,但如果是的话,这些文件相对于 go.mod 位置的路径都是错误的)

Face++旷视
Face++旷视

Face⁺⁺ AI开放平台

下载

一种选择是通过自己调用 protoc 手动生成 go 文件,并删除 build 文件中的 proto_librarygo_proto_library 规则,然后更改 go_library 规则来构建生成的文件。这是次优的,因为每次更改 .proto 文件时都必须手动重新运行 protoc (如果将其放入 //go:generate 指令,则必须重新运行 gogenerate)。

相反,我们可以执行以下操作:

  1. 将文件 empty.go 添加到包含 .proto 文件的目录中。它应该看起来像这样:
package proto
  1. 然后告诉 ngazelle 忽略 empty.go (这样当您运行 gazelle --fix 时,它不会尝试将 go_library 规则添加到 build 文件中)。我们通过将以下内容添加到 build 文件来实现此目的:
# gazelle:exclude empty.go

这足以让 go mod tidy 闭嘴。

这也将使 ide 停止抱怨导入,尽管在引用该包中应该包含的任何内容时仍然会出现错误。如果您不想放弃 ide 而选择带有 bazel 插件的优秀 goland 或 intellij idea,您可能必须求助于手动 protoc 方法。也许有一种方法可以创建一个符号链接到 bazel 在 bazel-bin 下写出生成的 .go 文件的位置,并强制 go mod tidy 跟随它,但我还没有尝试过。如果您这样做并且有效,请分享!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

4395

2026.01.21

vscode
vscode

VS Code(Visual Studio Code)是一款免费、开源的跨平台代码编辑器,由微软开发和维护。它被广泛用于软件开发和编程,支持多种编程语言和框架。VS Code 同时提供了丰富的功能和扩展性,使开发者可以高效地编写、编辑和调试代码。

629

2023.06.30

vscode怎么运行代码
vscode怎么运行代码

vscode是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

228

2023.07.21

vscode使用的框架介绍
vscode使用的框架介绍

VSCode是一款跨平台代码编辑器,它基于Electron框架和Monaco Editor构建。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

414

2024.03.14

vscode一般用来写什么语言
vscode一般用来写什么语言

VSCode是一款功能强大的代码编辑器,支持多种编程语言和文件格式。它内置对 JavaScript、Python、Java、C++、TypeScript、HTML/CSS、Go 等语言的支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

393

2024.03.14

vscode可以写什么语言
vscode可以写什么语言

vscode是一款强大的代码编辑器,支持多种编程语言的开发。通过安装扩展,可以为 JavaScript/TypeScript、Python、Java、C#、PHP、Go、Ruby、Rust、HTML/CSS 等语言提供智能代码补全、调试和格式化等功能。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

584

2024.03.15

vscode中文设置方法
vscode中文设置方法

方法一:在设置页面中,搜索“locale”,并选择“zh-cn”。方法二:按“Ctrl Shift P”快捷键,输入“Configure Display Language”,将语言修改为“zh-cn”。如果上述方法无效,可考虑安装中文插件。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

600

2024.03.15

vscode用途介绍
vscode用途介绍

Visual Studio Code(VSCode)是一款由 Microsoft 开发的多功能文本编辑器,适用于各种编程语言。作为一款开源软件,VSCode 拥有代码高亮、自动补全、调试、Git 集成等强大功能,成为程序员不可或缺的工具。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

587

2024.03.15

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

69

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号