web-dev-qa-db-ja.com

goモジュールのインストールgoツール

私は依存関係管理としてgoモジュールを使用していますが、次のようなものをインストールするのに問題があります。

go get -u github.com/go-critic/go-critic/...

上記の結果は次のとおりです。

go: cannot find main module; see 'go help modules'
9
Luis.at.code

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が動作します。

7
Kaedys

Go 1.12 (2019年2月)では、GO111MODULE=on go getが機能します。
issue 2425 から)

モジュール

GO111MODULEonに設定されている場合、goコマンドはモジュールディレクトリ外のモジュール対応の操作をサポートするようになりました。ただし、これらの操作は、現在のディレクトリ、または明示的にgo.modファイルを編集します。
_go getgo list、およびgo mod downloadなどのコマンドは、最初は空の要件を持つモジュールのように動作します。
このモードでは、go env GOMODはシステムのヌルデバイス(/dev/nullまたはNUL)を報告します。

4
VonC

ここでの他の回答のいくつかは、この時点で古くなっています。

考慮すべきケースが少なくとも2つあります。

事例1

ツールをインストールしたいが、そのツールを依存関係として追跡するために現在の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 を参照してください。

事例2

一方、go.modのバージョン付き依存関係としてツールを明示的に追跡する場合は、 「モジュールのツール依存関係を追跡するにはどうすればよいですか?」 FAQモジュールwikiで。

つまり、別のパッケージにtools.goファイルを作成し、次のような// +build toolsビルドタグを設定します。

// +build tools

package tools

import (
    _ "golang.org/x/tools/cmd/stringer"
)

インポートステートメントを使用すると、goコマンドでモジュールのgo.modにツールのバージョン情報を正確に記録できます。また、// +build toolsビルド制約により、通常のビルドで実際にツールをインポートできなくなります。

4
typical182

このコマンドを試してくださいGO111MODULE=on go get -u github.com/go-critic/go-critic/...

0
KibGzr

Go1.11.2でも同じ問題が発生しました。 GO111MODULE=onを設定しようとしましたが、これで修正できませんでした。

私の解決策:

  1. 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'の問題を解決できます。

  2. その後、別の問題go: cannot use path@version syntax in GOPATH modeを受け取りました。

    env GO111MODULE=onの設定で解決できます

0
leo