Heim >Backend-Entwicklung >Golang >„Go Mod Tidy' beschwert sich, dass das von Bazel generierte Protobuf-Paket fehlt
Wenn der PHP-Editor Banana mit Kompilierungsfehlern zu kämpfen hat, beschwert sich manchmal der Befehl „go mod Tidy“, dass das von Bazel generierte Protobuf-Paket fehlt. Die Lösung dieses Problems ist eigentlich sehr einfach. Sie müssen lediglich die entsprechende Protobuf-Paketabhängigkeit manuell in die Datei go.mod einfügen. Durch Ausführen des Befehls „go mod Tidy“ zum Aktualisieren der Abhängigkeiten wird durch erneutes Kompilieren das Problem des Paketverlusts beseitigt. Diese Methode ist einfach und effektiv und kann Entwicklern helfen, Kompilierungsfehler schnell zu beheben und die Entwicklungseffizienz zu verbessern.
Ich habe eine .proto
protobuf 定义文件,我正在使用 bazel 从中构建一个 go 库,如下所示(下面使用 gazelle
生成的 build.bazel
-Datei im Verzeichnis):
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"], )
Ein anderer Code hängt von //icoyote/proto:proto
,当我在模块中运行 go mod tidy
时,它抱怨找不到包 github.com/acme/icoyote/proto
: p> ab
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"
Jede IDE ohne Bazel-Integration (z. B. vscode, goland/intellij ohne Bazel-Plugin) wird sich ebenfalls beschweren
Was soll ich tun?
Dies geschieht, weil Bazel den Pfad zum falschen Speicherort verwendetprotoc
在 build
文件中的 go_proto_library
规则下生成 .go
文件,但仅将它们写到 bazel 下的临时目录中 - bin
由 go_library
规则使用,并且 go mod tidy
似乎没有研究 bazel-bin
(可能是因为它是一个符号链接,但如果是的话,这些文件相对于 go.mod
). protoc
手动生成 go 文件,并删除 build
文件中的 proto_library
和 go_proto_library
规则,然后更改 go_library
规则来构建生成的文件。这是次优的,因为每次更改 .proto
文件时都必须手动重新运行 protoc
(如果将其放入 //go:generate
指令,则必须重新运行 gogenerate
empty.go
添加到包含 .proto
package proto
ngazelle
忽略 empty.go
(这样当您运行 gazelle --fix
时,它不会尝试将 go_library
规则添加到 build
文件中)。我们通过将以下内容添加到 build
# gazelle:exclude empty.go
zum Schweigen zu bringen. go mod tidy
protoc
-Ansatz zurückgreifen. Vielleicht gibt es eine Möglichkeit, unter bazel-bin
einen symbolischen Link zu bazel zu erstellen und den Speicherort der generierten .go
-Datei aufzuschreiben und zu zwingen, ihr zu folgen, aber ich habe es getan Noch nicht probiert. Wenn Sie dies tun und es funktioniert, teilen Sie es bitte mit! protoc
方法。也许有一种方法可以创建一个符号链接到 bazel 在 bazel-bin
下写出生成的 .go
文件的位置,并强制 go mod tidy
Das obige ist der detaillierte Inhalt von„Go Mod Tidy' beschwert sich, dass das von Bazel generierte Protobuf-Paket fehlt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!