私は依存関係管理としてgoモジュールを使用していますが、次のようなものをインストールするのに問題があります。
go get -u github.com/go-critic/go-critic/...
上記の結果は次のとおりです。
go: cannot find main module; see 'go help modules'
Edit:ここでの元の答えは、Go 1.11のツールの状態を特に指していました。 Go 1.12のリリース以降、これはもはや正確ではありません。 Go 1.12以降でこの状況を処理する方法の詳細については、 この回答 とリンク先をご覧ください。
GO111MODULE
varがon
に設定されている場合、go get
を使用するには、初期化されたgoモジュールディレクトリツリー内にいる必要があります。 ツール新しいdependencyではなく。これはよく知られた議論の多い問題です。
https://github.com/golang/go/issues/2764
https://github.com/golang/go/issues/2425
https://github.com/golang/go/issues/25922
短期的な解決策は、GO111MODULE=off go get <tool>
を実行することです。これにより、現在モジュールパッケージを使用している場合でも、モジュールサポートが明示的に無効になり、GOPATHのみを使用するように強制されます。
go get
(またはフラグ付きのgo install
などの別のコマンド)を使用してツールのインストールをサポートすることが最善の解決策であるかどうかを長期的に判断することは、確立されたコンセンサスがほとんどない進行中の議論の領域ですまだ。ただし、Go 1.12には PR open があり、受け入れられると、go get
が設定されていても、モジュールの外でGO111MODULE=on
が動作します。
Go 1.12 (2019年2月)では、GO111MODULE=on go get
が機能します。
( issue 2425 から)
GO111MODULE
がon
に設定されている場合、go
コマンドはモジュールディレクトリ外のモジュール対応の操作をサポートするようになりました。ただし、これらの操作は、現在のディレクトリ、または明示的にgo.mod
ファイルを編集します。
_go get
、go list
、およびgo mod download
などのコマンドは、最初は空の要件を持つモジュールのように動作します。
このモードでは、go env GOMOD
はシステムのヌルデバイス(/dev/null
またはNUL
)を報告します。
ここでの他の回答のいくつかは、この時点で古くなっています。
考慮すべきケースが少なくとも2つあります。
ツールをインストールしたいが、そのツールを依存関係として追跡するために現在のgo.mod
を変更したくない場合。
要するに、Go 1.12または1.13での最も簡単な解決策は、次のようなgo.mod
のないディレクトリにcd
することです。
$ cd /tmp
$ go get github.com/some/[email protected]
または、 gobin は、現在のモジュールのgo.mod
を変更せずにインストールする機能など、追加の柔軟性を提供するバイナリをインストールまたは実行するモジュール対応コマンドです
Go 1.11のソリューションや、go.mod
を更新せずにツールを取得するためのGo 1.14の新しいオプションなど、詳細は answer を参照してください。
一方、go.mod
のバージョン付き依存関係としてツールを明示的に追跡する場合は、 「モジュールのツール依存関係を追跡するにはどうすればよいですか?」 FAQモジュールwikiで。
つまり、別のパッケージにtools.go
ファイルを作成し、次のような// +build tools
ビルドタグを設定します。
// +build tools
package tools
import (
_ "golang.org/x/tools/cmd/stringer"
)
インポートステートメントを使用すると、go
コマンドでモジュールのgo.mod
にツールのバージョン情報を正確に記録できます。また、// +build tools
ビルド制約により、通常のビルドで実際にツールをインポートできなくなります。
このコマンドを試してくださいGO111MODULE=on go get -u github.com/go-critic/go-critic/...
Go1.11.2でも同じ問題が発生しました。 GO111MODULE=on
を設定しようとしましたが、これで修正できませんでした。
私の解決策:
Go 1.12.5を使用するためのアップグレード: https://golang.org/doc/install?download=go1.12.5.linux-AMD64.tar.gz
これにより、go: cannot find main module; see 'go help modules'
の問題を解決できます。
その後、別の問題go: cannot use path@version syntax in GOPATH mode
を受け取りました。
env GO111MODULE=on
の設定で解決できます