go modules quick start
go modules quick start したときのメモを張り付け
quick start
プロジェクトディレクトリ作成
> md tmp\scratchpad\hello > cd tmp\scratchpad\hello
モジュール初期化。go.mod ができるので内容確認
>go mod init github.com/you/hello go: creating new go.mod: module github.com/you/hello >cat go.mod module github.com/you/hello go 1.12
hello.go 作成
package main import ( "fmt" "rsc.io/quote" ) func main() { fmt.Println(quote.Hello()) }
build と 実行。
> go build go: finding rsc.io/quote v1.5.2 go: downloading rsc.io/quote v1.5.2 go: extracting rsc.io/quote v1.5.2 go: finding rsc.io/sampler v1.3.0 go: finding golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c go: downloading rsc.io/sampler v1.3.0 go: extracting rsc.io/sampler v1.3.0 go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c go: extracting golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c > hello.exe Hello, world.
go.mod 確認
>cat go.mod module github.com/you/hello go 1.12 require rsc.io/quote v1.5.2
GOHOME\pkg\mod に依存物がある。
GOHOME\pkg\mod\rsc.io\quote@v1.5.2 GOHOME\pkg\mod\rsc.io\sampler@v1.3.0
go list -m all。依存モジュールリストってところ?
>go list -m all github.com/you/hello golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c rsc.io/quote v1.5.2 rsc.io/sampler v1.3.0
-u をつけるとアップグレードできるか確認できる。sampler に v1.99.99 がある。
>go list -u -m all go: finding rsc.io/sampler v1.99.99 go: finding golang.org/x/text v0.3.2 github.com/you/hello golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c [v0.3.2] rsc.io/quote v1.5.2 rsc.io/sampler v1.3.0 [v1.99.99]
バージョン指定(アップグレード)でgo get。rsc.io/quote v1.5.2 が依存しているのは sampler@v1.3.0 じゃないの?こんなことできるのか?と思いつつやったらできた。
リストされたのは 1.99.99
で、1.3.0
はなかった。
モジュール間の依存バージョンが微妙に異なるときどうなる?後のほうを使う?後方互換性大事ってこと?
>go get rsc.io/sampler@v1.99.99 go: downloading rsc.io/sampler v1.99.99 go: extracting rsc.io/sampler v1.99.99 >go list -u -m all github.com/you/hello golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c [v0.3.2] rsc.io/quote v1.5.2 rsc.io/sampler v1.99.99
GOHOME\pkg\mod に sampler@v1.99.99 ができている。
GOHOME\pkg\mod\rsc.io\quote@v1.5.2 GOHOME\pkg\mod\rsc.io\sampler@v1.3.0 GOHOME\pkg\mod\rsc.io\sampler@v1.99.99
バージョン指定(ダウングレード)でgo get。これがもとの状態。
>go get rsc.io/sampler@v1.3.0 >go list -u -m all github.com/you/hello golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c [v0.3.2] rsc.io/quote v1.5.2 rsc.io/sampler v1.3.0 [v1.99.99]
さらにバージョン指定(ダウングレード)でgo get。samplerを1.2.0に下げたら、quote も下がった。quote をバージョン高->低で検索しているのがわかる。面白い。 go.mod では、sampler@v1.2.0 がindirectとマークされている。
>go get rsc.io/sampler@v1.2.0 go: finding rsc.io/sampler v1.2.0 go: finding rsc.io/quote v1.5.1 go: finding rsc.io/quote v1.5.0 go: finding rsc.io/quote v1.4.0 go: finding rsc.io/sampler v1.0.0 go: downloading rsc.io/sampler v1.2.0 go: extracting rsc.io/sampler v1.2.0 >go list -u -m all github.com/you/hello golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c [v0.3.2] rsc.io/quote v1.4.0 [v1.5.2] rsc.io/sampler v1.2.0 [v1.99.99] >cat go.mod module github.com/you/hello go 1.12 require ( rsc.io/quote v1.4.0 rsc.io/sampler v1.2.0 // indirect )