この記事の目的
writefreelyのセットアップ方法はドキュメントに記載されていますが、手順通りに進めるとエラーが出ました。この記事ではエラーの解決方法について記載します。
エラーの内容
Quick startに沿ってgo getコマンドを走らせると以下のエラーが発生します。
> go get -d github.com/writefreely/writefreely/cmd/writefreely
go: go.mod file not found in current directory or any parent directory.
'go get' is no longer supported outside a module.
To build and install a command, use 'go install' with a version,
like 'go install example.com/cmd@latest'
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
エラーの原因
比較的新しいGoのバージョンを使っていると、$GOPATHではなく新しいGo Moduleを使った方法で依存管理を行います。GO111MODULELEという設定で$GOPATHかGo Moduleを選択できますが、以下の記事にある通り、バージョンによって動きが違いかなり複雑なので詳細は割愛します。
Go ModuleはGoのバージョンが新しいと、必須になっておりgo getはGo Module無しでは使えなくなっています。
解決方法
以下の通り、GO111MODULEをautoにしてgo.modファイルがない場所では以前の$GOPATHを使った動きになるようにしました。
go env -w GO111MODULE=auto
上のコマンドを実行後にgo get -d github.com/writefreely/writefreely/cmd/writefreelyを実行すると、$GOPATH/srcにソースコードがダウンロードされます。
cd $GOPATH/src/github.com/writefreely/writefreely
は$GOPATHが設定されていない場合、$GOPATHはホームディレクトリーのgoディレクトリーにデフォルトでは作られるので$HOME/go/src/github.com/writefreely/writefreelyで移動できるかと思います。
その他
- 私の環境では
echo $GOPATHで確認しても値が設定されていませんが、go env GOPATHでは値が設定されていました。どうやら最近のGoではzhrcなどに$GOPATHを設定する必要はなさそうです。
-
$GOPATHの方法でgo getを使うと$GOPATH/src/にソースがダウンロードされるが、Go Moduleでgo getを使うと$GOPATH/pkg/modにダウンロードされます。
Since Go 1.15, go get by default will download source codes inside
$GOPATH/pkg/mod/ (GOMODCACHE)which is in place of what it used to be$GOPATH/src/