Принимая хранилище для v2 - PullRequest
0 голосов
/ 16 ноября 2018

На данный момент я использую модули Go 1.11 для нескольких репозиториев.Прямо сейчас я имею дело с тем, который был уже в версии 1.x.В сочетании с перемещением модулей go я сделал несколько других критических изменений, поэтому ясно, что пришло время увеличить основную версию репозитория.Это означает переход на версию 2.

Согласно документации "команды go":

Для сохранения совместимости импорта команда go требует, чтобы модули с основной версией v2 или новее использовали путь к модулю.с этой основной версией в качестве последнего элемента.Например, версия v2.0.0 для example.com/m должна вместо этого использовать путь к модулю example.com/m/v2, и пакеты в этом модуле будут использовать этот путь в качестве префикса пути импорта, как в example.com/m/v2/ суб / упак.Включение основного номера версии в путь модуля и пути импорта таким способом называется «семантическим контролем версий импорта».

Источник

Это так просто, какобновить первую строку моего go.mod файла, добавив /v2 к имени модуля?Или я должен создать каталог v2/ в моем хранилище и переместить туда все файлы?

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Из раздела Выпуск модулей (v2 или выше) раздела wiki модулей:

Существует два альтернативных механизма для освобождения модуля v2 или выше.Обратите внимание, что с обоими методами новая версия модуля становится доступной для потребителей, когда автор модуля нажимает на новые теги.На примере создания v3.0.0 выпуска доступны две опции:

  1. Основная ветвь : обновите файл go.mod, добавив в конце /v3путь к модулю в директиве module (например, module github.com/my/module/v3).Обновите операторы импорта в модуле, чтобы также использовать /v3 (например, import "github.com/my/module/v3/mypkg").Отметьте релиз как v3.0.0.
    • Go версии 1.9.7+, 1.10.3+ и 1.11+ могут правильно использовать и создавать модуль v2 +, созданный с использованием этого подхода, не требуя обновления потребительского кода, который еще не подключен к модулям (как описано в разделе «Управление версиями семантического импорта» выше).

...

Основной подкаталог : создайте новый подкаталог v3 (например, my/module/v3) и поместите новый файл go.mod в этот подкаталог.Путь к модулю должен заканчиваться /v3.Скопируйте или переместите код в подкаталог v3.Обновите операторы импорта в модуле, чтобы также использовать /v3 (например, import "github.com/my/module/v3/mypkg").Пометьте выпуск v3.0.0.

Однако в этом разделе есть дополнительные подробности, которые стоит рассмотреть.

Здесь есть один важный момент, который стоит упомянуть: если вы заинтересованы в автоматизированном подходе (например, возможно, у вас есть много файлов, которые вам нужно посетить), хорошее автоматизированное решение - https://github.com/marwan-at-work/mod,, который может автоматически добавлять, удалять или изменять необходимые /vN в вашем коде *.go и вашем go.mod.См. этот ответ для более подробной информации.

0 голосов
/ 19 ноября 2018

Существует два варианта перехода на версию 2: ветви и подкаталоги. Вы можете прочитать больше о них (с лучшими иллюстрациями) на https://research.swtch.com/vgo-module.

Эти две опции позволяют одной версии зависеть от другой. Например, когда вы реализуете версию 2, вы можете обновить версию 1, чтобы она зависела от версии 2 (но сохранить тот же API v1). Тогда вам нужно иметь только одну реализацию логики для вашей библиотеки. Это может или не может хорошо работать для вас, в зависимости от типа проекта, поддержки, которую вы хотите предоставить, и необходимых исправлений.

Филиалы

master: A -> B (v1.0.0) -> D (v1.0.1)
                         \
v2:                       -> C (v2.0.0)

В этом сценарии:

  1. Вы запускаете свой проект в ветке master,
  2. Сделать несколько коммитов (A и B),
  3. Tag v1.0.0.
  4. Вы решили сделать решающее изменение. Итак, вы создаете новую ветку (git checkout -b v2) и вносите в нее критические изменения. Теперь ваш go.mod должен быть обновлен, чтобы имя модуля заканчивалось на /v2 (по сути это новый модуль!).
  5. Вы решаете исправить ошибку в v1, поэтому вы возвращаетесь в эту ветку, делаете новый коммит и отмечаете новую v1 версию.

Когда пользователю требуется определенная версия вашего модуля, go будет искать в двух ветвях, для которых одна предоставляет нужный модуль.

Подкаталоги

Что, если вы не хотите развиваться на ветках? Вы можете создать подкаталог для каждой основной версии. Версия 1 остается на верхнем уровне, затем новые версии перемещаются в подкаталоги:

go.mod (module example.com/foo)
foo.go
v2/
  go.mod (module example.com/foo/v2)
  foo.go

Когда вы помечаете этот репозиторий новыми версиями, v1 будет использовать версию верхнего уровня. Теги v2 будут использовать подкаталог v2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...