> For the complete documentation index, see [llms.txt](https://alexrios.gitbook.io/gomodules/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://alexrios.gitbook.io/gomodules/basico/rotina-usando-modulos/atualizando-dependencias.md).

# 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)&#x20;
* 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.
