2023-08-07 投稿

VSCodeのgo環境でimportエラーが発生する時

goでは、go.modファイルのあるディレクトリがモジュールとして認識されます。 VSCodeでモジュールのimportがうまくいかない場合の対処法です。

状況

エラーの内容

基本的には、go.modのあるディレクトリでgo mod tidyを実行すればimportされるはずである。
しかし、以下のようなエラーが発生して、上記を実行しても解決しなかった。

could not import some/package/name (current file is not included in a workspace module)compilerBrokenImport

Error loading workspace: gopls was not able to find modules in your workspace. When outside of GOPATH, gopls needs to know which modules you are working on. You can fix this by opening your workspace to a folder inside a Go module, or by using a go.work file to specify multiple modules. See the documentation for more information on setting up your workspace: https://github.com/golang/tools/blob/master/gopls/doc/workspace.md.

原因

プロジェクトルートにgo.modが存在しない。

対処法

レポジトリの都合で、ルートにgo.modを置きたくない場合もある。
例えば、以下のような場合。go.modがapiディレクトリにあるため、importエラーが発生してしまう。

1api/
2| ├ main.go
3│ ├ go.mod
4│ └ go.sum
5├ .env
6└ README.md

プロジェクトルートで以下のコマンドを実行する。

1go work init

go.workというファイルが生成されるので、
そこにuse {go.modがあるディレクトリ}を追記することでimportできるようになる。

1go 1.20
2
3use ./api

レポジトリ内に複数のgo.modが存在する場合

VSCodeのsettings.json(Cmd/Ctrl + Shift + P)を開き、goplsのexperimentalWorkspaceModuleの設定を記述する

1{
2  ...
3  "gopls": {
4    "experimentalWorkspaceModule"; true
5  }
6  ...
7}
1go 1.20
2
3use (
4  ./module-a
5  ./module-b
6)