go modules のつかいかたメモ

npm などのパッケージマネージャはよく使うのだけど、それに比べて go modules は最初「?」となることが多かったのでメモ

すべてのはじまりは go mod init

まず、始まりは go mod init である。これは npm init のように最初やる必要がある。

go mod init でエラー?

手元でやってみたら早速エラーになった。

$ go mod init
go: cannot determine module path for source directory /path/to/gomodtest (outside GOPATH, no import comments)

これは公式のWikiに書いてあった

Why does 'go mod init' give the error 'cannot determine module path for source directory'?

init の引数を省略すると、VCS (git等) の情報から module path を推測するらしい。自分がためしたディレクトリでは git init などしていなかったので、推測できませんでした、ということなのだろう。

たとえば npm init ではパッケージ名はディレクトリ名から自動的に推測してくれるが、Go のパッケージ名というのは github.com/castaneai/xxx のような命名なので、ディレクトリ名だけから推測というのはできないのだろう。

というわけで明示的にパッケージ名を指定したら成功。

$ go mod init github.com/castaneai/gomodtest
go: creating new go.mod: module github.com/castaneai/gomodtest

$ cat go.mod 
module github.com/castaneai/gomodtest

npm install 的なコマンドは?

go get または go build でよい。 go modules が有効になっている環境だと、この2つのコマンドを実行すると自動的に go.mod に追加される。

本当にインストールのみしたい場合は、go mod download でよい。

go modules にしたら GOPATH の役割はもうないのか

No.

GOPATH は go install で入る $GOPATH/bin だったり、キャッシュの $GOPATH/pkg/cache は以前と同じ役割で残っている