Goに関するメモ

 warning: GOPATH set to GOROOT (<パス>) has no effect

問題概要

$GOROOTはインストールパスだが、以下のように$GOPATHにインストールディレクトリを指定することは出来ない。だから怒られている。

Note that GOPATH must not be the same path as your Go installation.

golang.org

解決策

素直に$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.

go.dev

 

解決策

問題の本質は$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フォルダにしていると起きる。

github.com

エラーから内容を類推しにくいので(特にGOPATH使ったことないとわからないと思う)、結構めんどくさいエラー。

 

解決策

$HOMEや、Windowsなら$USERPROFILEの直下に作ったgoフォルダを指定するのではなく、そこ以外にする。

 

随時更新します。

*1:正確には0.11,012でGOMODULEが導入されたが、デフォルトではなかった。

*2:その場合当然go mod系のコマンドは使わない事になる