В модулях Go в версии указываются теги семантической версии. Семантическая версия состоит из трех частей: мажорной, минорной и патча. Например, для v0.1.2 основной (мажорной) версией является 0, второстепенной (минорной) версией - 1, а версией патча - 2. Пройдемся по паре небольших обновлений версии. В следующем посте мы рассмотрим обновление основной версии.
Из вывода списка go -m all видно, что мы используем немаркированную версию golang.org/x/text. Обновимся до последней версии с тегами и проверим, что наш тест, созданный в предыдущих постах, все еще работает:
$ go get golang.org/x/text
go: finding golang.org/x/text v0.3.0
go: downloading golang.org/x/text v0.3.0
go: extracting golang.org/x/text v0.3.0
$ go test
PASS
ok example.com/hello 0.013s
$
Все проходит. Еще раз посмотрим на список go -m all и файл go.mod:
$ go list -m all
example.com/hello
golang.org/x/text v0.3.0
rsc.io/quote v1.5.2
rsc.io/sampler v1.3.0
$ cat go.mod
module example.com/hello
go 1.12
require (
golang.org/x/text v0.3.0 // indirect
rsc.io/quote v1.5.2
)
$
Пакет golang.org/x/text обновлен до последней версии с тегами (v0.3.0). Файл go.mod был обновлен и теперь также указывает v0.3.0. indirect комментарий указывает, что зависимость не используется непосредственно этим модулем, только косвенно другими зависимостями модуля.
Теперь попробуем обновить минорную версию rsc.io/sampler. Начнем так же, запустив go get и запустив тесты:
$ go get rsc.io/sampler
go: finding rsc.io/sampler v1.99.99
go: downloading rsc.io/sampler v1.99.99
go: extracting rsc.io/sampler v1.99.99
$ go test
--- FAIL: TestHello (0.00s)
hello_test.go:8: Hello() = "99 bottles of beer on the wall, 99 bottles of beer, ...", want "Hello, world."
FAIL
exit status 1
FAIL example.com/hello 0.014s
$
Провал теста показывает, что последняя версия rsc.io/sampler несовместима с нашим использованием. Перечислим доступные теговые версии этого модуля:
$ go list -m -versions rsc.io/sampler
rsc.io/sampler v1.0.0 v1.2.0 v1.2.1 v1.3.0 v1.3.1 v1.99.99
$
Мы использовали v1.3.0; v1.99.99 явно не годится. Может быть, мы можем попробовать использовать v1.3.1 вместо этого:
$ go get rsc.io/sampler@v1.3.1
go: finding rsc.io/sampler v1.3.1
go: downloading rsc.io/sampler v1.3.1
go: extracting rsc.io/sampler v1.3.1
$ go test
PASS
ok example.com/hello 0.022s
$
Обратите внимание на явный @v1.3.1 в аргументе go get. В общем, каждый аргумент, передаваемый в get get, может иметь явную версию; значение по умолчанию - @latest, которое разрешается до последней версии, определенной ранее.
Читайте также:
Комментариев нет:
Отправить комментарий