Сообщение об ошибке go mod tidy: «но go 1.16 выберет»

Когда я запускаю go mod tidy несколько пакетов показывают ошибку

> go mod tidy

github.com/myrepo/myproj imports
    go.k6.io/k6 imports
    go.k6.io/k6/cmd imports
    github.com/fatih/color loaded from github.com/fatih/color@v1.12.0,
    but go 1.16 would select v1.13.0

To upgrade to the versions selected by go 1.16:
    go mod tidy -go=1.16 && go mod tidy -go=1.17
If reproducibility with go 1.16 is not needed:
    go mod tidy -compat=1.17
For other options, see:
    https://golang.org/doc/modules/pruning

У меня установлена ​​версия 1.17.9. Что означает ошибка и почему она срабатывает?

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
3
0
316
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта ошибка связана с обрезка графа модуля, представленным в Go 1.17.

В Go 1.16 граф модулей для выбора минимальной версии раньше включал полный граф модулей, тогда как в 1.17 граф включал только транзитивные зависимости (за некоторыми исключениями, см. ссылку выше).

Теперь, чтобы понять, что вызывает ошибку, вы можете взглянуть на Примечания к выпуску Go 1.17:

By default, go mod tidy verifies that the selected versions of dependencies relevant to the main module are the same versions that would be used by the prior Go release (Go 1.16 for a module that specifies go 1.17) [...]

Поэтому, когда вы запускаете go mod tidy, он сообщает, что Go 1.16 «выберет» версию транзитивной зависимости (github.com/fatih/color), которая отличается от той, которую выберет усеченный граф Go 1.17.

Это важно для воспроизводимости сборки, потому что go.sum содержит контрольные суммы для текущей версии Go, указанные в go.modи предыдущий. В случае Go 1.17 и Go 1.16, где график модулей может эффективно меняться, go.sum будет непоследовательным.

Сообщение об ошибке предлагает два исправления.

  1. go mod tidy -go=1.16 && go mod tidy -go=1.17 — это выбирает версии зависимостей как Go 1.16, а затем как Go 1.17.

  2. go mod tidy -compat=1.17 — это просто удаляет контрольные суммы Go 1.16 (отсюда совет «воспроизводимость с go 1.16 не нужна»).

Ошибка больше не должна появляться после обновления до Go 1.18, потому что тогда график модуля будет загружаться так же, как в Go 1.17.

Другие вопросы по теме