Adicionando uma dependência em uma nova versão principal (major)
Vamos adicionar uma nova função ao nosso pacote: func Proverb retorna um provérbio de simultaneidade Go, chamando quote.Concurrency, que é fornecido pelo módulo rsc.io/quote/v3. Primeiro, atualizamos hello.go para adicionar a nova função:
Em seguida, adicionamos um teste a hello_test.go:
Então podemos testar nosso código:
Observe que nosso módulo agora depende de rsc.io/quote e rsc.io/quote/v3:
Cada versão principal diferente (v1, v2 e assim por diante) de um módulo go
usa um caminho de módulo diferente: começando na v2
, o caminho deve terminar na versão principal. No exemplo, v3
de rsc.io/quote
não é mais rsc.io/quote
: em vez disso, é identificado pelo caminho do módulo rsc.io/quote/v3
. Essa convenção é chamada de versionamento de importação semântica e dá nomes diferentes aos pacotes incompatíveis (aqueles com versões principais diferentes). Em contraste, v1.6.0
de rsc.io/quote
deve ser compatível com versões anteriores com v1.5.2
, portanto, ele reutiliza o nome rsc.io/quote
. (Na seção anterior, rsc.io/sampler
v1.99.99
deveria ter compatibilidade retroativa com rsc.io/sampler v1.3.0
, mas bugs ou suposições incorretas do cliente sobre o comportamento do módulo podem ocorrer.)
O comando go
permite que uma compilação inclua no máximo uma versão de qualquer caminho de módulo específico, ou seja, no máximo um de cada versão principal: um rsc.io/quote
, um rsc.io/quote/v2
, um rsc.io/quote/v3
e assim por diante.
Isso dá aos autores do módulo uma regra clara sobre a possível duplicação de um único caminho do módulo: é impossível para um programa construir com rsc.io/quote v1.5.2
e rsc.io/quote v1.6.0
.
Ao mesmo tempo, permitir diferentes versões principais de um módulo (porque eles têm caminhos diferentes) dá aos consumidores do módulo a capacidade de atualizar para uma nova versão principal de forma incremental.
Neste exemplo, queríamos usar quote.Concurrency
de rsc/quote/v3 v3.1.0
, mas ainda não estamos prontos para migrar nossos usos de rsc.io/quote v1.5.2
. A capacidade de migrar incrementalmente é especialmente importante em um programa grande ou base de código.
Last updated