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
は以前と同じ役割で残っている