LoginSignup
5
3

gopls was not able to find modules in your workspace. への対処

Last updated at Posted at 2023-08-22

VSCodeにおけるGoのモジュール周りのエラー

参考書の写経やハンズオンイベントでのコード管理で、たまに出会います。

image-3.png

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.

このエラーにたまに出会うので、対処法をまとめておきます。

環境

  • macOS Ventura 13.5
  • VSCode バージョン: 1.81.1
  • go version go1.20.7 darwin/amd64

サンプルのディレクトリ構成

上の画像で package mainに赤線が引かれた状態のディレクトリ構成は以下です。

.
├── sample1
│   ├── go.mod
│   └── main.go     <-------- ここのpackage mainでエラー
└── sample2
    ├── go.mod
    └── main.go     <-------- ここのpackage mainでエラー

対処

エラーを読むと、

using a go.work file to specify multiple modules.

とありました。go.workを使えばいいみたいです。

go.workとは

go 1.18から追加されたWorkspace modeと呼ばれるものです。複数モジュールを管理しやすくするものです。(ざっくり)

go.workを作る

$ go work init 
or 
$ go work init 
$ go work use ./sample1 ./sample2
or 
$ go work init ./sample1 ./sample2

でできます。
go modに少し似てますね。
作った後のディレクトリ構成としては、

.
├── go.work
├── sample1
│   ├── go.mod
│   └── main.go
└── sample2
    ├── go.mod
    └── main.go

のようになります。
すると、
image-4.png
消えました。
ヤッターーー

注意する点

go.workはルートディレクトリに作らないといけない

  • 今回だと、sample1やsample2の上に作らないといけないです。

go.work内のuseに注意

  • 開いているフォルダがgo.workのuseに指定されていない時、
    This file is within module "sample1/sample1-1", which is not included in your workspace.
    To fix this problem, you can add this module to your go.work file (/Users/itoushingo/workplace/Practice_golang/test/go.work)
    See the documentation for more information on setting up your workspace:
    https://github.com/golang/tools/blob/master/gopls/doc/workspace.md.
    
    という文とともにpackage mainに黄色波線が引かれます。
    新しくフォルダを作って実装を始めたら、go work useで追加します。
  • モジュール名が被ってると、
    packages.Load error: err: exit status 1: stderr: go: module モジュール名 appears multiple times in workspace.
    
    というエラーが出ます。
    go mod initの時に指定するモジュール名が被らないよう注意します。

VSCodeのsetting.jsonについて

setting.jsonに

{
    "gopls": { 
        "experimentalWorkspaceModule": true
    }
}

を記述すると、私の環境では

Invalid settings: gopls setting "experimentalWorkspaceModule" is deprecated

となり、非推奨になったみたいです。

おわりに

今後気になったら随時追加修正していきます。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3