29
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HRBrainAdvent Calendar 2023

Day 16

VSCode×GoでGOROOT or GOPATHが見つからない大量エラーの解消。

Last updated at Posted at 2023-12-15

こんにちは。

フロントエンドエンジニアでバックエンドも頑張りたいみつです:relaxed:

GoをVS Codeで書いているのですが、直接的な問題もなく見て見ぬふりをしていた下記のエラー。

could not import XXX (cannot find package "XXX" in GOROOT or GOPATH)

赤い線が多すぎてついに、VS Codeでエラータブでエラー数が10kに到達したのでそろそろやばいでしょ...という焦りと何が起きていたんだろうを記事にしたものです。

ちなみに、自分の場合は、Goのインストールも出来ているのと、ターミナルでGoを認識もしていたので、go.modファイルがあるディレクトリでワークスペースを開くだけでエラーの文言は消えました。

目次

最近起きてた嫌なこと:frowning2:

terminalでgo versionコマンドを叩くと、Goを認識する。

ただ、エディタ画面や問題のタブにはBrokenImportの大量エラーが発生している。

[terminal画面]
image.png

[エディタ画面と問題タブ]
image.png

BrokenImportってなんだろう?

// BrokenImport occurs when importing a package fails.
//
// Example:
//  import "amissingpackage"
BrokenImport

BrokenImportは、ファイルインポートに失敗した時に起きる。

うん、それはそう。

ImportがBrokenしているみたい。

GOROOTとかGOPATHってなんだろう?

could not import XXX (cannot find package "XXX" in GOROOT or GOPATH)

GOROOT は、Go SDK の場所を定義する変数です。
異なる Go バージョンを使用する予定がない限り、この変数を変更する必要はありません。

GOPATH は、ワークスペースのルートを定義する変数です。

GoLandドキュメントによると、GOROOTはGo SDKの場所を定義する変数。
GOPATHは、ワークスペースのルートを定義する変数。

envを見ると、GOPATHもGOROOTも設定されるね。よしよし。

> go env
・・・
GOPATH='/Users/okada.mitsuhiro/go'
GOROOT='/opt/homebrew/Cellar/go/1.21.4/libexec'
・・・

自分の場合、異なるGoバージョンを使用することはあまりなさそうなので、GOPATHが認識されずにBrokenImportを起こしているのかなというところです。

「Using Go Modules」ドキュメントを読む

なるほどなと思ったところだけをピックしてみます。

A module is a collection of Go packages stored in a file tree with a go.mod file at its root.

モジュールは、ファイルツリー内のGoのパッケージ群。

As of Go 1.11, the go command enables the use of modules when the current directory or any parent directory has a go.mod, provided the directory is outside $GOPATH/src.

go commandのモジュールが有効になるのは、カレントディレクトリか親ディレクトリにgo.modがあるのと、$GOPATH/srcの外であることが条件。

[公式ドキュメント]

VS Codeのエラーに対応する。

特に何をした、というわけではないんですが・・・

go.modがあるディレクトリに移ることで、モジュールモードが有効になってPATHが認識されたという感じでした。

image.png

まとめ

一番上の階層から開いて大量に赤文字のエラーが出てただけ。

でもエラーを通して、GOPATHやGOROOT、go.modなどへの理解が深められたのが嬉しいなと思います。

ただ、10kもエラーの個数が出てくるまで放置していたのもやばいなと思うのでもっと早くからエラー調査する癖をつけようと思います。

おわり。

29
10
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
29
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?