четверг, 14 февраля 2019 г.

Go FAQ: Как управлять версиями пакетов, используя "go get"?

С момента создания проекта у Go не было четкой концепции версий пакетов, но это меняется. Управление версиями является источником значительной сложности, особенно в больших базах кода, и потребовалось некоторое время, чтобы разработать подход, который хорошо работает в масштабе в достаточно большом разнообразии ситуаций, подходящих для предоставления всем пользователям Go.

Релиз Go 1.11 добавил новую экспериментальную поддержку для контроля версий пакетов в команду go, в виде модулей Go.

Независимо от фактической технологии управления пакетами, "go get" и больший набор инструментов Go обеспечивает изоляцию пакетов с разными путями импорта. Например, стандартные библиотеки html/template и text/template сосуществуют, хотя оба являются "package template". Это наблюдение приводит к некоторым советам для авторов пакетов и пользователей пакетов.

Пакеты, предназначенные для публичного использования, должны стараться поддерживать обратную совместимость по мере их развития. Рекомендации по совместимости с Go 1 - хороший справочник: не удаляйте экспортированные имена, поощряйте составные литералы с тегами и т.д. Если требуется другая функциональность, добавьте новое имя вместо изменения старого. Если требуется полный разрыв, создайте новый пакет с новым путем импорта.

Если вы используете поставляемый извне пакет и беспокоитесь о том, что он может измениться неожиданными способами, но еще не используете модули Go, самое простое решение - скопировать его в локальный репозиторий. Это тот подход, который Google использует для себя и поддерживается командой go с помощью метода, называемого "vendoring". Он включает в себя хранение копии зависимости по новому пути импорта, который идентифицирует ее как локальную копию.


Читайте также:


Комментариев нет:

Отправить комментарий