Не может требовать определенную версию немодульного пакета Go

Я хочу потребовать определенную версию пакета Go, которая еще не была преобразована для использования модулей, я хочу потребовать это в моем go.mod файле. В частности, это пакет github.com/docker/docker/pkg/[email protected]

Когда я запускаю следующую команду, я получаю следующий результат:

$ go get -v github.com/docker/docker/pkg/[email protected]
go: found github.com/docker/docker/pkg/system in github.com/docker/docker v17.12.0-ce-rc1.0.20200916142827-bd33bbf0497b+incompatible

Как видите, скачивается версия v17.12.0-ce, а не v19.03.13. Я также заметил суффикс несовместимости +, но не уверен, что это имеет какое-либо отношение к проблеме. Согласно документам

команда go добавляет суффикс + несовместимый к версиям с основной версией 2 или выше без файла go.mod. + несовместимость означает, что версия является частью того же модуля, что и версии с более низкими основными номерами версий; следовательно, команда go может автоматически обновиться до более поздних + несовместимых версий, даже если это может нарушить сборку.

поэтому я понимаю, что в этом пакете нет файла go.mod, однако загруженная версия (17.x) больше 2, поэтому я не думаю, что +incompatible является проблемой.

у меня вопрос: когда я указываю версию v19.03.13, почему Go устанавливает v17.12.0-ce?

Это версия, которую я хочу использовать

Это загруженный


person northsideknight    schedule 01.10.2020    source источник
comment
Версия не имеет значения, поскольку это не модуль и создается синтетическая версия на основе наилучшего предположения о родительском дереве. Посмотрите на идентификатор фиксации, и вы увидите, что вы также получаете последнюю фиксацию от v19.03.13   -  person JimB    schedule 01.10.2020
comment
эй @JimB, добрый глаз, ты хочешь добавить это в качестве ответа, и я могу отметить это правильно?   -  person northsideknight    schedule 01.10.2020


Ответы (1)


Версия, указанная в go.mod псевдоверсии, не имеет значения для репозиториев, которые не идут модули. Версия v19.03.13 не является синтаксически допустимой семантической версией, поэтому инструмент go будет подниматься по дереву фиксации, чтобы найти его, и первым действительным семвером, с которым он сталкивается, оказывается v17.12.0 (который не предназначен для семантической версии, но находится на наименее действительный). Тот факт, что ведущая версия не соответствует ожидаемой в псевдоверсии, не является проблемой, если сам go может воспроизвести и проанализировать результат.

Если вы посмотрите на конечный хэш фиксации, у вас есть bd33bbf0497b, который является правильным идентификатором фиксации для тега v19.03.13.

person JimB    schedule 01.10.2020
comment
v19.03.13 не используется в качестве основы псевдоверсии, поскольку он синтаксически неверен как семантическая версия. - person bcmills; 17.02.2021
comment
@bcmills, ну конечно! Спасибо - person JimB; 17.02.2021
comment
К сожалению, v17.12.0-ce-rc1 синтаксически допустим и как семантическая версия, и как календарная версия. В репозитории Docker он предназначен для второго, но команда go интерпретирует его как первое. - person bcmills; 17.02.2021