Com os módulos, as versões são referenciadas com tags de versão semântica. Uma versão semântica tem três partes: principal, secundária e patch.
Por exemplo, para v0.1.2:
- a versão principal é 0 (MAJOR)
- a versão secundária é 1 (MINOR)
- a versão do patch é 2 (PATCH)
Na próxima seção, consideraremos uma atualização de versão principal.
Pela saída de go list -m all
, podemos ver que estamos usando uma versão não tageada de golang.org/x/text. Vamos atualizar para a última versão tageada e testar se tudo ainda funciona:
$ 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
$
Uau! Tudo passando. Vamos dar outra olhada em go list -m all
e no arquivo 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
)
$
O pacote golang.org/x/text
foi atualizado para a última versão tageada (v0.3.0
). O arquivo go.mod
também foi atualizado para especificar a v0.3.0
. O comentário indirect
indica que uma dependência não é usada diretamente por este módulo, apenas indiretamente por outras dependências do módulo.
Agora, vamos tentar atualizar a versão secundária rsc.io/sampler
. Comece da mesma maneira, executando go get
e rodando os testes:
$ 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
$
Uh, oh! A falha do teste mostra que a versão mais recente de rsc.io/sampler
é incompatível com nosso uso. Vamos listar as versões marcadas disponíveis desse módulo:
$ 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
$
Estávamos usando a v1.3.0
; v1.99.99
claramente não é bom. Talvez possamos tentar usar a v1.3.1
em vez disso:
$ 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
$
Observe o @v1.3.1
explícito no argumento go get
. Em geral, cada argumento passado para go get
pode assumir uma versão explícita; o padrão é @latest
, que resolve para a versão mais recente conforme definido anteriormente.