вторник, 25 июня 2019 г.

Go модули: обновление зависимостей

В модулях 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, которое разрешается до последней версии, определенной ранее.


Читайте также:


Комментариев нет:

Отправить комментарий