Atualizando dependências
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 escolher uma versão tageada, v0.23.0, e testar se tudo ainda funciona. A versão é fixa para reproduzir este tutorial; no seu projeto, @latest consulta a versão mais recente:
$ go get golang.org/x/text@v0.23.0$ go mod tidy$ go testPASSok 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 allexample.com/hellogolang.org/x/text v0.23.0rsc.io/quote v1.5.2rsc.io/sampler v1.3.0$ cat go.modmodule example.com/hello
go 1.27.1
require rsc.io/quote v1.5.2
require ( golang.org/x/text v0.23.0 // indirect rsc.io/sampler v1.3.0 // indirect)$O pacote golang.org/x/text foi atualizado para a versão tageada escolhida (v0.23.0). O arquivo go.mod também foi atualizado para especificar a v0.23.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 uma atualização de versão secundária de rsc.io/sampler para v1.99.99. Comece da mesma maneira, executando go get e rodando os testes:
$ go get 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."FAILexit status 1FAIL example.com/hello 0.014s$Uh, oh! A falha do teste mostra que essa versão 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/samplerrsc.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 testPASSok example.com/hello 0.022s$Observe o @v1.3.1 explícito no argumento go get. Use uma versão explícita para escolher a atualização. Sem o sufixo, go get usa @upgrade: procura a versão mais recente, mas mantém a atual se ela já for mais nova, por exemplo uma pré-release. @latest também pode fazer downgrade nesses casos.