post Image
Golang 1.11でGO111MODULE=onの状態でグローバルにgo getできない時の対処法

Golang製のツールをgo getしようとした時、

go: cannot find main module; see 'go help modules'

とエラーが出力されキョトンとしてしまいました。
ググってみてもこれと言った明確な解決方が見つからなかったのですが、GolangのWikiのModulesページに対処法がまとまっていました。

結論

Golang公式にはいくつかの対処法が記載されていましたが、今回採用した手順は以下の通りです。

Goツール用のディレクトリを作成

僕はホームディレクトリに作成しましたが、基本的にはどこでもOKです。

mkdir go-tools
cd go-tools

Modulesの初期設定

以下のコマンドでGo Modulesのファイルが作成されます。

go mod init go-tools

go getの実行

例としてgo-langserverをインストールしたい場合は以下の通りです。uオプションはお好みで。

go get -u github.com/sourcegraph/go-langserver

これで$GOPATH/binにGo製のツールが追加され、グローバルで利用できるようになっているはずです。

補足

エラーが出るようになった原因

Go 1.11において、GO111MODULE=onを設定している場合、go.modファイルの存在するディレクトリでしかgo getが実行されなくなります。
GO111MODULE=onの挙動がGo 1.12から標準になるらしいので、今後は上で紹介したような方法や何かしらのツールを使った管理を行う形になるのかも知れません。

その他の対処法

GolangのWikiのModulesページでは他にもグローバルにツールをインストールする方法がいくつか紹介されていましたので、その一部を紹介いたします。
他の方法や詳細を知りたい方はWikiの方をご覧ください。

GO111MODULE=onを辞める

GO111MODULE=onの時にModulesの仕様上go getのグローバル実行ができないのであれば、それをやめてしまえばいいという話。
環境変数からGO111MODULE=onを取り除くか、GO111MODULE=autoを設定するといいでしょう。

実行時だけGO111MODULE=onを外す

Go 1.12以降に備えてGO111MODULE=onはセットしたままで慣れておきたい、という場合、実行時だけModulesを外すという手もあります。

GO111MODULE=off go get example.com/cmd

エイリアスを設定しておくという方法も紹介されていました。

alias oldget='GO111MODULE=off go get'

 まとめ

掲載内容に誤りや疑問がありましたら、コメント・編集リクエストをいただけると大変助かります。
閲覧いただき、ありがとうございました。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。