ホームページ  >  記事  >  バックエンド開発  >  `go mod tiny` は、bazel によって生成された protobuf パッケージが見つからないと文句を言います

`go mod tiny` は、bazel によって生成された protobuf パッケージが見つからないと文句を言います

PHPz
PHPz転載
2024-02-10 10:09:171250ブラウズ

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

PHP エディター Banana がコンパイル エラーに対処しているときに、「go mod tiny」コマンドで bazel によって生成された protobuf パッケージが見つからないというメッセージが表示されることがあります。この問題の解決策は実際には非常に簡単で、対応する protobuf パッケージの依存関係を go.mod ファイルに手動で追加するだけです。 「go mod tiny」コマンドを実行して依存関係を更新することで、再度コンパイルすることでパッケージ消失の問題が解消されます。この方法はシンプルかつ効果的であり、開発者がコンパイル エラーを迅速に解決し、開発効率を向上させるのに役立ちます。

質問内容

ディレクトリに .proto protobuf 定義ファイルがあり、以下に示すように bazel を使用してそこから go ライブラリを構築しています (## を使用)以下 #gazelle 生成された build.bazel ファイル): リーリー

他のコードは

//icoyote/proto:proto に依存しており、モジュール内で go mod tiny を実行すると、パッケージ github が見つからないというメッセージが表示されます。 com/acme/icoyote/proto: リーリー p>Bazel 統合のない IDE (Bazel プラグインのない vscode、goland/intellij など) も問題を発生します

###私は何をしますか?

解決策

これは、bazel

build ファイルで protoc を使用するために発生します。 .go## を生成します。 #go_proto_library ルールの下にあるファイルですが、go_library ルールで使用される bazel - bin の下の一時ディレクトリにのみ書き込まれます。また、go mod tiny bazel-bin を調べていないようです (おそらくシンボリックリンクであるためですが、そうであれば、これらのファイルは go.mod## に相対的です # 場所へのパスは次のとおりですすべて間違っています) 1 つのオプションは、protoc を自分で呼び出して go ファイルを手動で生成し、build## 内の

proto_library

ルールと go_proto_library ルールを削除することです。 # file を作成し、生成されたファイルをビルドするように go_library ルールを変更します。 .proto ファイルを変更するたびに protoc を手動で再実行する必要があるため、これは次善の策です (ファイルを //go:generate に置いた場合)ディレクティブを使用している場合は、gogenerate) を再実行する必要があります。 代わりに、次のことができます: ファイル empty.go

.proto

ファイルが含まれるディレクトリに追加します。次のようになります:
  1. リーリー 次に、ngazelle
  2. empty.go
を無視するように指示します (したがって、
    gazelle --fix
  1. を実行すると、go_library## は試行されません) # ルールが build ファイルに追加されました)。これを行うには、build ファイルに次のコードを追加します。 リーリー 黙るにはこれで十分です 整頓してください これにより、IDE はインポートに関して文句を言うこともなくなりますが、パッケージ内にあるものを参照するときにエラーが発生することは変わりません。 Bazel プラグインを使用した Goland または Intellij の優れたアイデアを優先して IDE を放棄したくない場合は、手動の protoc
  2. アプローチに頼らなければならない場合があります。おそらく、
bazel-bin

の下に bazel へのシンボリックリンクを作成し、生成された .go ファイルの場所を書き出して、

go mod tiny

を強制的に実行する方法があるかもしれません。フォローする ありますが、まだ試していません。これを実行してうまくいった場合は、共有してください。

以上が`go mod tiny` は、bazel によって生成された protobuf パッケージが見つからないと文句を言いますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。