ホームページ  >  記事  >  バックエンド開発  >  Golang、ローカルインポートパスからリモートインポートパスへの移動の問題

Golang、ローカルインポートパスからリモートインポートパスへの移動の問題

王林
王林転載
2024-02-09 08:27:38595ブラウズ

Golang、ローカルインポートパスからリモートインポートパスへの移動の問題

php エディタ Baicao が、Golang でのローカル インポート パスからリモート インポート パスへの移行に関する質問に答えます。 Golang 開発では、特に複数の人が開発やプロジェクトの移行に協力する場合に、ローカル インポート パスからリモート インポート パスに移行する状況によく遭遇します。この記事では、コードがスムーズに実行されるようにこの問題を正しく処理する方法について詳しく説明します。見てみましょう!

質問の内容

アプリケーションを異なるリポジトリに分割し始めたところです。多くの人と同じように、私も Go を扱い、リポジトリを変更するという苦労をしています。しかし、これらの質問には多くの質疑応答があるため、ここでは質問しません。

その代わり、簡単な質問があるのですが、理解できません。私のモジュールはすべて、大きなアプリケーションなので、単なるローカル参照です。たとえば、core/validate などです。

コンテンツを複数のリポジトリに移動します。ローカル参照で問題が発生するようだったので、いくつかの Q&A が示唆しているように、パスをリモート パス (例: gitlab.com/<group>/core.git/validate</group>) に変更しました。

ただし、gitlab.com/<group>/core.git/config</group>gitlab.com/<group>/core.git/ を参照している場合、問題が発生します。 validate</group> は、gitlab.com/ <group>/core.git/config</group>pck/mod/gitlab.com/... を指すようになったという意味ではありません。リモート サーバーを指すコンテンツ、または互い以外のどこかを指すコンテンツ (core/validate? のような相対パスしかない場合など) IDE (GoLand) では参照が見つからないと表示されるため、これらを変更すると次のようになります。

go mod init を実行して MOD を最初から再構築することは試していませんが、go mod tiny は機能せず、そうする必要があるかどうかはわかりません go も同様です。work でリモート パスを変更するのは問題ありませんが、IDE に表示されるインポートが見つかりません。

開発中にリモート参照を使用してコードに加えた変更を行う場合は、参照が指す場所になるように変更をプッシュする必要があるようです。おそらく go get Change toローカルのリモート パスを参照します。これは開発方法としては不適切なため、正しいとは言えません。

それでは、これらのリモート パスは開発でどのように機能するのでしょうか。何が足りないのでしょうか?

解決策

混乱を引き起こす可能性のある概念がいくつかあります。

モジュールはパッケージのコレクションです。モジュールに「mymodule」という名前を付けると、「mymodule」の下にあるすべてのパッケージの名前が「mymodule/pkg1」、「mymodule/pkg2/otherpkg」などになります。

これで、パッケージのインポート パスが得られます。インポート パスはパッケージの場所を示します。たとえば、ソース コードが「mymodule/pkg1」にあり、「mymodule/pkg2」をインポートする場合、これは同じモジュールの下にあるパッケージへの参照になります。

次に、「github.com/mygroup/othermodule」に「othermodule」という名前の別のモジュールがあると仮定します。このモジュールのパッケージを「github.com/mygroup/othermodule/pkg1」としてインポートします。 「othermodule/pkg1」が「othermodule/pkg2」を参照している場合でも、「othermodule/pkg2」は同じモジュール内にあるため、インポートされます。ただし、「mymodule/pkg1」からは「github.com/mygroup/othermodule/pkg2」としてインポートします。

Go モジュール システムは、他のモジュールからのバージョン参照を使用します。モジュールからパッケージをインクルードすると、モジュールの特定のバージョンが go.mod に追加されます。新しい変更をモジュールにプッシュする場合は、参照を更新してそれらの変更を含める必要があります。そのため、密結合したプロジェクトを複数のモジュールに分割しないことが最善です。

複数のモジュールを一緒に開発する場合は、リポジトリ上のバージョンを指す代わりに、「replace」ディレクティブを使用してモジュールのローカル コピーを使用します。

以上がGolang、ローカルインポートパスからリモートインポートパスへの移動の問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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