Перейти модули несколько основных методов
У меня есть проект с основными методами mutliple. При беге go build program1/main1.go
который имеет другой набор зависимостей, чем program2/main2.go
, мой первый go build
кажется, изменить мой go.mod
файл и удаляет зависимости, которые, по его мнению, ему не нужны. Еще main2
понадобятся эти зависимости.
Я пытался использовать go build ...
но это также создало другой набор зависимостей. В частности, кажется, что все //indirect
зависимости удаляются и приводят к сбою program2.
Есть ли способ бега go build
или же go run
без обновления go.mod
файл? С помощью go build -mod=readonly program1/main1.go
это говорит мне, что это терпит неудачу, потому что зависимости должны быть обновлены..
2 ответа
Я считаю, что вы ищете подмодули. Посмотри на эту прогулку.
TLDR: вам понадобится отдельный go.mod
в каждом из ваших инструментов cmd
Дир, и вы можете использовать replace
директива для указания зависимостей от этих инструментов на ваш локальный модуль.
Эта проблема Go и другие ссылки, связанные с ней, предполагают, что поиск "единственно правильного способа" сделать это по-прежнему WIP, хотя я думаю, что ваш сценарий использования достаточно прост.
Использование подмодулей — это способ вложения нескольких проектов модулей Go, которые вы можете редактировать .
Но в Go 1.18 может быть включено понятие рабочего пространства Go, что означает, что вам больше не нужны подмодули: один проект Go может включать в себя несколько модулей, которые вы можете редактировать.
Видеть
Фон
Пользователи часто хотят внести изменения в несколько модулей: например, добавить новый интерфейс в пакет в одном модуле вместе с использованием этого интерфейса в другом модуле.
Обычно команда распознает один "
", который пользователь может редактировать.
Другие модули доступны только для чтения и загружаются из кэша модулей.The
Директива является исключением: она позволяет пользователям заменить разрешенную версию модуля рабочей версией на диске.
Но работа сДиректива часто может быть неудобной: у каждого разработчика модуля рабочие версии могут находиться в разных местах на диске, поэтому наличие директивы в файле, который необходимо распространять вместе с модулем, не подходит для всех случаев использования. Предложение
Это предложение описывает новый режим рабочей области в команде для редактирования нескольких модулей.
Наличиефайл в рабочем каталоге или в содержащем каталоге переведет команду в режим рабочей области .
Файл определяет набор локальных модулей, составляющих рабочую область. При вызове в режиме рабочей области команда всегда будет выбирать эти модули и согласованный набор зависимостей.Основные модули : модуль, в котором работает пользователь.
До этого предложения это был единственный модуль, содержащий каталог, в котором вызывается команда. Этот модуль используется в качестве отправной точки при запуске MVS.
В этом предложении предлагается разрешить использование нескольких основных модулей .
См., например, CL 334934 (CL = Список изменений)
[
] : добавить режим рабочей области Это изменение добавляет схему реализации режима рабочей области.
The
теперь команда найдет файлы и прочитать их, чтобы определить, какие модули находятся в рабочей области.
Затем он поместит эти модули в корень рабочей области при построении списка сборки.
Он поддерживает создание, запуск, тестирование и листинг в рабочих областях.
Вы можете инициировать многомодульный проект сgo mod initwork
Опять же, это не раньше Go 1.18 (1 квартал 2022 г.) и, вероятно, будет включено в Go 1.19 (3 квартал 2022 г.).