ホームページ  >  記事  >  バックエンド開発  >  Go モジュールが「バージョンのない置換モジュールはディレクトリ パス (ルート化されているか、... で始まる) である必要があります」エラーをスローするのはなぜですか?

Go モジュールが「バージョンのない置換モジュールはディレクトリ パス (ルート化されているか、... で始まる) である必要があります」エラーをスローするのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-05 17:56:021000ブラウズ

Why does Go Modules throw the

go modules - 「バージョンのない置換モジュールはディレクトリ パスである必要があります (ルート化されているか、... で始まる)」 グリッチ

コンテキスト内go モジュールの場合、replace ディレクティブを使用すると、モジュールをローカル パスに置き換えることができます。ただし、このディレクティブには特定の要件があります。パスはルート (「/」で始まる) であるか、モジュールのルートからの相対パスである必要があります。

問題の理解

提供されたシナリオでは、go モジュール (goweb) 内でローカル パッケージ (mypack) を使用しようとすると、「バージョンのない置換モジュールはディレクトリ パス (ルート化されているか、で始まる) である必要があります。」というエラーが発生しました。このエラーは、パスがreplace ディレクティブに指定された形式が必要な形式を満たしていません。

問題の解決

この問題を解決するには、replace ディレクティブのパスが次の条件を満たしていることを確認してください。 :

  • 絶対パス (「/」で始まる) である必要があります。
  • パスが相対パスの場合は、モジュールのルート ディレクトリ (モジュールを含むディレクトリ) からの相対パスである必要があります。 go.mod ファイル).

解決策

goweb モジュールの場合、mypack はそのルート ディレクトリの兄弟であるため、正しい replace ディレクティブ

<code class="go">replace mypack => ../mypack</code>

さらに、この置換が効果的に機能するには、mypack をそのディレクトリに go.mod ファイルを追加して go モジュールに変換する必要もあります。これは、mypack ディレクトリ内でコマンド go mod init mypack を実行することで実行できます。

その他の考慮事項

アプリとそれが使用するパッケージが同じ一部である場合go モジュールを go.mod に追加する必要はありません。コード内でパッケージを参照するだけで十分です。

リソース

  • [Go モジュールのディレクティブを置換](https://go.dev/ref) /mod#hdr-Replace_Directives)
  • [「GOPATH」の外にあるモジュールを別のモジュールで使用するには?](https://stackoverflow.com/questions/52576751/how-to-use-別のモジュールの gopath の外側にあるモジュール)

以上がGo モジュールが「バージョンのない置換モジュールはディレクトリ パス (ルート化されているか、... で始まる) である必要があります」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。