Итак, вы написали Go "библиотечный" модуль, который:
- вы не хотите публиковать на GitHub или в другом месте
- вы хотите импортировать и использовать его в своем проекте («основной» модуль).
Используйте директиву replace
для решения этой проблемы.
Учитывая имя модуля "X", как вы его назвали, в свой основной модуль добавьте следующие строки:
require "X" v0.0.0
replace "X" v0.0.0 => "{local path to the X module}"
Путь должен указывать на корневой каталог модуля и может быть абсолютным или относительным.
Для импорта пакета util из модуля X :
import "X/util"
(Вы не импортируете модули. Вы импортируете пакеты из модулей.)
Объяснение
Функциональность модуля Go предназначена для общедоступных модулей. Обычно имя модуля является и его уникальным идентификатором, и путем к его публичному репо. Когда ваш go.mod объявляет зависимость модуля с помощью директивы require
, Go автоматически найдет и получит указанную версию модуля по этому пути.
(См. Также в FAQ по модулям Go, Можно ли работать полностью вне VCS в моей локальной файловой системе? )
Если, например, ваш файл go.mod
содержит require github.com/some/dependency v1.2.3
, Go извлечет модуль из GitHub по этому пути. Но если он содержит require X v0.0.0
, «X» не является реальным путем, и вы получите ошибку cannot find module for path X
.
Директива replace
позволяет вам указать путь замены для данного идентификатора модуля и версии. Есть много причин, по которым вы хотите сделать это , например, чтобы проверить изменения в модуле, прежде чем отправлять их в публичный репозиторий. Но вы также можете использовать его для привязки идентификатора модуля к локальному коду, который вы никогда не собираетесь публиковать.
Надеюсь, это поможет.