こんにちは。KOUKIです。
とあるWeb系企業で、Go言語エンジニアをしています。
Go言語をVisualStudio CodeとGo言語で開発しているのですが、以下のエラーに遭遇しました。
1 2 |
no required module provides package github.com/hoge/go-sample/models; to add it: go get github.com/hoge/go-sample/models (compile) |
import文のエラーですね。
Go Modulesの理解の甘さが原因だったわけですが、調査・解決方法を備忘として残したいと思います。
何をしたのか
まず、以下のフォルダ配下にプロジェクトを作成しました。
1 |
/Users/hoge/go/src/github.com/hoge/go-sample |
そして、go mod iniit sample
を実行し、go.modファイルを作成しました。
1 2 3 |
module sample go 1.18 |
そして、以下のフォルダ構成で、Goのコードを書いてます。
1 2 3 4 5 6 |
. ├── go.mod ├── main.go ├── models └── models.go |
1 2 3 4 5 6 7 8 9 10 11 |
package main import ( "fmt" "github.com/hoge/go-sample/models" ) func main() { m := models.Parent{} fmt.Println(m) } |
import文は、VisualStudio Codeが自動でimportしてくれます。
この時点で、上記に記載したエラーが発生しました。
調査
import文調査
VisualStudio Codeによってimportされた文をよく見ると「github.com/hoge/go-sample/models」になってました。
しかし、本当は以下のようになって欲しいのです。(go mod init sampleをしたから)
1 2 3 4 5 6 7 8 9 10 11 |
package main import ( "fmt" "sample/models" // sampleからimportして欲しい ) func main() { m := models.Parent{} fmt.Println(m) } |
上記のように手動で書き直したら、コードは実行できました。
1 2 |
$ go run main.go {0 [] 0 0} |
しかし、VisualStudio Code上ではエラーが表示されます。

「何だ、これは!」という感じです。
GOPATH調査
Go ModuleはGOPATHと関係性があるとどこかで聞いたことがあったので、GOPATHを調査しました。
1 2 |
$ echo $GOPATH /Users/hoge/go |
プロジェクトの格納先の親パスが指定さていました。
(ソースコード格納先: /Users/hoge/go/src/github.com/hoge/go-sample)
そこで、GOPATHの外にプロジェクトを置いた場合について確認してみました。
Desktop配下にtestフォルダを作成し、先ほど作成したファイルをコピペします。
1 |
/Users/hoge/Desktop/test |
ソースコードを確認するとエラーが消えてました!

どうやらGOPATHに関係がありそうですね。
解決方法
一瞬、GOPATHを削除することを考えました。
しかし、「github.com/hoge/go-sample」を指定してgo mod initしたらどうなるだろうと思い、試してみました。
* GOPATH(/Users/hoge/go)の配下に、「github.com/hoge/go-sample」が設置されているからです。
* srcは含めません
1 2 3 4 5 |
rm go.mod $ go mod init github.com/hoge/go-sample go: creating new go.mod: module github.com/hoge/go-sample go: to add module requirements and sums: go mod tidy |
ソースコードのimportを一旦削除して、再度、VisualStudio Codeにimportさせました。
1 2 3 4 5 6 7 8 9 10 11 12 |
package main import ( "fmt" "github.com/hoge/go-sample/models" ) func main() { m := models.Parent{} fmt.Println(m) } |
すると、今度はVisualStudio Code上からエラーが消えたのです!

コードも問題なく実行できました。
まとめ
まとめると以下になります。
- go mod initで指定するパスに誤りがあった
- GOPATH配下でコードを管理している場合は、ディレクトリのパスの指定に気をつける
- パスを自由につけたい場合は、GOPATH外でプロジェクトを作成する
あるいは、GOPATHを削除すると解決するかもしれませんが、試していませんw
参考になれば嬉しいです^^
それでは、また!
Go言語まとめ

コメントを残す
コメントを投稿するにはログインしてください。