tjtjtjのメモ

自分のためのメモです

go modules quick start

go modules quick start したときのメモを張り付け

github.com

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
)