目次
方法 1: ワークスペースとプロジェクト パスの一貫性を保つ
解決策 2: go work を使用して、ワークスペースに含まれるモジュールを指定する
エラーメッセージ
Golangを古いバージョンからgo1.20.5にアップグレードしてvscodeを開いたところ、コードが自動補完できず、エラーメッセージが出てvscodeが飛び出してしまいました。
gopls はワークスペース内でモジュールを見つけることができませんでした。
GOPATH の外にいる場合、gopls はどのモジュールで作業しているかを知る必要があります。
この問題を修正するには、ワークスペースを Go モジュール内のフォルダーに開くか、
go.work ファイルを使用して複数のモジュールを指定します。
ワークスペースの設定の詳細については、ドキュメントを参照してください。
分析する
上記のエラー メッセージは非常に簡潔です。golang は v1.11 から go mod メカニズムを導入しました。go mod メカニズムを改善するために、v1.18 からマルチモジュール ワークスペース メカニズムも導入されました (どの mod をワークスペースに含める必要があります)。 ? Inside)、つまり go work メカニズムでは、以前のバージョンから v1.18 以降にアップグレードした後、vscode 作業環境でエラーが報告される場合があります。
私の vscode で開かれたフォルダーのパスはデフォルトでそのワークスペース (ワークスペース) として設定されており、このワークスペースのルート ディレクトリには go.mod ファイルが必要です。ルート ディレクトリにこの go.mod がない場合は、どのディレクトリに go.mod があるかを指定する必要があります。サブディレクトリ go mod 作業領域への組み込みは少し複雑です。以下の内容を要約します。
- 一般に、プロジェクトのルート ディレクトリはワークスペースとして使用されます。プロジェクトの親ディレクトリまたはサブディレクトリがワークスペースとして使用される場合は、 go work コマンドを使用して、ワークスペースにどの MOD が含まれているかを示す必要があります。
- ワークスペースのルート ディレクトリに go.mod が存在する必要があります。go.mod がない場合は、生成できます。ワークスペースの下に生成したくない場合は、 go work コマンドを使用して、ワークスペース内のどの MOD をワークスペースに含める必要があるかを示します
解決する前に:
解決
方法 1: ワークスペースとプロジェクト パスの一貫性を保つ
vscode はディレクトリを再度開き、プロジェクト フォルダーを直接開き、プロジェクト パスをワークスペースとして使用し、プロジェクト パスのルート ディレクトリにすでに go.mod が存在するため、vscode はプロジェクト パスを直接開きます。
gopls はエラーを報告しません
図に示すように vscode が開きます。
解決策 2: go work を使用して、ワークスペースに含まれるモジュールを指定する
図に示すように、プロジェクト ディレクトリの親ディレクトリをワークスペースとして使用し、 go work コマンドを使用して必要なモジュールをワークスペースに組み込みます。
図に示すように vscode が開きます。
要約する
この小さな問題の解決策は、主にワークスペースの概念を理解することです。ワークスペースには複数のモジュールを含めることができます。ワークスペースが独自のプロジェクト パスと一致しており、プロジェクトのルート ディレクトリに go.mod があることが良い習慣です。
ワークスペースがプロジェクトのパスと一致しない場合は、go work を使用してモジュールを独自のワークスペースに組み込む必要があります。go work のパスはワークスペースの相対パスです。