Goに関するメモ
warning: GOPATH set to GOROOT (<パス>) has no effect
問題概要
$GOROOTはインストールパスだが、以下のように$GOPATHにインストールディレクトリを指定することは出来ない。だから怒られている。
Note that
GOPATH
must not be the same path as your Go installation.
解決策
素直に$GOPATHを作業ディレクトリに設定する。
$GOPATH/go.mod exists but should not
問題概要
go tidyをした場合とかに起きる問題。
そもそもGoのモジュール管理は0.12まで使われていた*1$GOPATHを使ったモジュール管理と、0.13よりデフォルトになったgo moduleを使ったモジュール管理の違いによって生じるもの。
As of Go 1.11, the go command enables the use of modules when the current directory or any parent directory has a
go.mod
, provided the directory is outside$GOPATH/src
.
解決策
問題の本質は$GOPATHを指定して、go getを使ったレガシーなモジュール管理を行うような設定になっているのにも関わらず、一方でgo modを使ったモダンなモジュール管理を行おうとしていること。
どっちかにせよ。
0.13以降であれば$GOPATHを消してgo moduleに一本化するしかない。
それ以前であれば、go envにGO111MODULEというのがあるので、これをoffにすることで$GOPATHを利用したモジュール管理にすることが出来る。*2。
$GOPATHを使いたくなければ0.13以降と同じように$GOPATHを削除し、GO111MODULEにonを設定する。
go env -w GO111MODULE=on
initializing sumdb.Client: could not locate sumdb file: missing $GOPATH: cannot set GOROOT as GOPATH
原因
$GOROOTをホームディレクトリ直下のgoフォルダにしていると起きる。
エラーから内容を類推しにくいので(特にGOPATH使ったことないとわからないと思う)、結構めんどくさいエラー。
解決策
$HOMEや、Windowsなら$USERPROFILEの直下に作ったgoフォルダを指定するのではなく、そこ以外にする。
随時更新します。