Lorsque l'éditeur php Banana traite des erreurs de compilation, parfois la commande "go mod spice" se plaint que le package protobuf généré par bazel est manquant. La solution à ce problème est en fait très simple. Il vous suffit d'ajouter manuellement la dépendance du package protobuf correspondante dans le fichier go.mod. Mettez à jour les dépendances en exécutant la commande "go mod spice", et il n'y aura aucun problème de perte de paquet lors de la nouvelle compilation. Cette méthode est simple et efficace et peut aider les développeurs à résoudre rapidement les erreurs de compilation et à améliorer l'efficacité du développement.
J'ai un .proto
protobuf 定义文件,我正在使用 bazel 从中构建一个 go 库,如下所示(下面使用 gazelle
生成的 build.bazel
fichier dans le répertoire) :
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"], )
Un autre code dépend de //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"
Tout IDE sans intégration bazel (comme vscode, goland/intellij sans plugin bazel) se plaindra également
Que dois-je faire ?
Cela se produit parce que Bazel utilisele protoc
在 build
文件中的 go_proto_library
规则下生成 .go
文件,但仅将它们写到 bazel 下的临时目录中 - bin
由 go_library
规则使用,并且 go mod tidy
似乎没有研究 bazel-bin
(可能是因为它是一个符号链接,但如果是的话,这些文件相对于 go.mod
chemin vers le mauvais emplacement)
Une option est de l'appeler vous-même protoc
手动生成 go 文件,并删除 build
文件中的 proto_library
和 go_proto_library
规则,然后更改 go_library
规则来构建生成的文件。这是次优的,因为每次更改 .proto
文件时都必须手动重新运行 protoc
(如果将其放入 //go:generate
指令,则必须重新运行 gogenerate
).
Au lieu de cela, nous pouvons faire ce qui suit :
empty.go
添加到包含 .proto
dans le répertoire du fichier. Cela devrait ressembler à ceci : package proto
ngazelle
忽略 empty.go
(这样当您运行 gazelle --fix
时,它不会尝试将 go_library
规则添加到 build
文件中)。我们通过将以下内容添加到 build
de réaliser ceci : # gazelle:exclude empty.go
Cela suffit à faire taire go mod tidy
.
Cela empêchera également l'EDI de se plaindre des importations, même si vous obtiendrez toujours des erreurs lorsque vous référencerez tout ce qui devrait être dans le package. Si vous ne voulez pas abandonner l'IDE au profit de la bonne idée goland ou intellij avec le plugin bazel, vous devrez peut-être recourir à l'approche manuelle protoc
. Il existe peut-être un moyen de créer un lien symbolique vers bazel sous bazel-bin
qui écrit l'emplacement du fichier .go
généré et force protoc
方法。也许有一种方法可以创建一个符号链接到 bazel 在 bazel-bin
下写出生成的 .go
文件的位置,并强制 go mod tidy
à le suivre, mais je n'ai pas Je n'ai pas encore essayé. Si vous faites cela et que cela fonctionne, partagez-le !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!