[Go言語]Go Modulesのimportで手こずった話をしたいと思います

こんにちは。KOUKIです。

とあるWeb系企業で、Go言語エンジニアをしています。

Go言語をVisualStudio CodeGo言語で開発しているのですが、以下のエラーに遭遇しました。

import文のエラーですね。

Go Modulesの理解の甘さが原因だったわけですが、調査・解決方法を備忘として残したいと思います。

何をしたのか

まず、以下のフォルダ配下にプロジェクトを作成しました。

そして、go mod iniit sample を実行し、go.modファイルを作成しました。

そして、以下のフォルダ構成で、Goのコードを書いてます。

import文は、VisualStudio Codeが自動でimportしてくれます。

この時点で、上記に記載したエラーが発生しました。

調査

import文調査

VisualStudio Codeによってimportされた文をよく見ると「github.com/hoge/go-sample/models」になってました。

しかし、本当は以下のようになって欲しいのです。(go mod init sampleをしたから)

上記のように手動で書き直したら、コードは実行できました。

しかし、VisualStudio Code上ではエラーが表示されます。

何だ、これは!」という感じです。

GOPATH調査

Go ModuleはGOPATHと関係性があるとどこかで聞いたことがあったので、GOPATHを調査しました。

プロジェクトの格納先の親パスが指定さていました。
(ソースコード格納先: /Users/hoge/go/src/github.com/hoge/go-sample)

そこで、GOPATHの外にプロジェクトを置いた場合について確認してみました。

Desktop配下にtestフォルダを作成し、先ほど作成したファイルをコピペします。

ソースコードを確認するとエラーが消えてました!

どうやらGOPATHに関係がありそうですね。

解決方法

一瞬、GOPATHを削除することを考えました。

しかし、github.com/hoge/go-sample」を指定してgo mod initしたらどうなるだろうと思い、試してみました。
* GOPATH(/Users/hoge/go)の配下に、「github.com/hoge/go-sample」が設置されているからです。
* srcは含めません

ソースコードのimportを一旦削除して、再度、VisualStudio Codeにimportさせました。

すると、今度はVisualStudio Code上からエラーが消えたのです!

コードも問題なく実行できました。

まとめ

まとめると以下になります。

  • go mod initで指定するパスに誤りがあった
  • GOPATH配下でコードを管理している場合は、ディレクトリのパスの指定に気をつける
  • パスを自由につけたい場合は、GOPATH外でプロジェクトを作成する

あるいは、GOPATHを削除すると解決するかもしれませんが、試していませんw

参考になれば嬉しいです^^

それでは、また!

Go言語まとめ

まとめ記事


コメントを残す