2
0

More than 3 years have passed since last update.

A tour of goで"no required module provides package golang.org/x/tour/"が出て困った

Posted at

めっちゃ初歩的で恥ずかしいんですが、めっちゃ詰まってました笑

バージョン

go version
go version go1.17 darwin/arm64

 事象

以下のように、golang.org/x/tour/の下のパッケージをimportするようなファイルが実行できない。

go run ./exercise-images.goで実行したときのエラーは以下。
exercise-images.go:7:5: no required module provides package golang.org/x/tour/pic: go.mod file not found in current directory or any parent directory; see 'go help modules'

解決

モジュール化したいルートディレクトリに遷移して以下コマンドを実行します。

go mod init <モジュール名>

そうすると、再度go runをすると

exercise-images.go:7:5: no required module provides package golang.org/x/tour/pic; to add it:
        go get golang.org/x/tour/pic

と表示されるので、
go get golang.org/x/tour/picにて実行できました。

解説

Goの1.16のリリースからGO111MODULEの規定値が変更されているみたいです。
このリリースが2021年2月で、比較的新しいのであまり探しても解決策が出なかったようです。。

解決策その1

Goの1.16以前の設定に戻して実行する方法です。
環境変数のGO111MODULE=autoに設定すればOK。
go env -w GO111MODULE=auto

解決策その2(上に書いた方法)

go mod initでモジュール化する方法。

何が違うの?

正直自分より詳しい人たちが書いた記事あるので、自分の簡単な理解を書いておきます。。
前者はGOPATHモードと言って、パッケージを全てGOPATH配下で管理するモードという理解です。
バージョンは1つしか管理しないため、異なるバージョンを使いたいときに困る。

後者はモジュールモードと言って、モジュールごとにパッケージを管理するモードです。
1.16からデフォルトでこちらを使用するようになったので、公式推奨です。
go.modファイルの中でモジュール間の依存関係を記述します。このとき、バージョン込みで管理できるので、GOPATHモードのときのような問題は起こらなくなります。

以上

2
0
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
2
0