この記事の目的
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/