20210907のGoに関する記事は1件です。

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

めっちゃ初歩的で恥ずかしいんですが、めっちゃ詰まってました笑 バージョン 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モードのときのような問題は起こらなくなります。 以上
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む