Перейти модули несколько основных методов

У меня есть проект с основными методами 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 может включать в себя несколько модулей, которые вы можете редактировать.

Видетьпроблема 45713: «предложение: добавить режим рабочей области» и его проектный документ.

Фон

Пользователи часто хотят внести изменения в несколько модулей: например, добавить новый интерфейс в пакет в одном модуле вместе с использованием этого интерфейса в другом модуле.

Обычно команда распознает один " ", который пользователь может редактировать.
Другие модули доступны только для чтения и загружаются из кэша модулей.

The Директива является исключением: она позволяет пользователям заменить разрешенную версию модуля рабочей версией на диске.
Но работа с Директива часто может быть неудобной: у каждого разработчика модуля рабочие версии могут находиться в разных местах на диске, поэтому наличие директивы в файле, который необходимо распространять вместе с модулем, не подходит для всех случаев использования.

Предложение

Это предложение описывает новый режим рабочей области в команде для редактирования нескольких модулей.

Наличиефайл в рабочем каталоге или в содержащем каталоге переведет команду в режим рабочей области .
Файл определяет набор локальных модулей, составляющих рабочую область. При вызове в режиме рабочей области команда всегда будет выбирать эти модули и согласованный набор зависимостей.

Основные модули : модуль, в котором работает пользователь.
До этого предложения это был единственный модуль, содержащий каталог, в котором вызывается команда. Этот модуль используется в качестве отправной точки при запуске MVS.
В этом предложении предлагается разрешить использование нескольких основных модулей .

См., например, CL 334934 (CL = Список изменений)

[ ] : добавить режим рабочей области

Это изменение добавляет схему реализации режима рабочей области.

The теперь команда найдет файлы и прочитать их, чтобы определить, какие модули находятся в рабочей области.
Затем он поместит эти модули в корень рабочей области при построении списка сборки.
Он поддерживает создание, запуск, тестирование и листинг в рабочих областях.

Вы можете инициировать многомодульный проект сgo mod initwork

Опять же, это не раньше Go 1.18 (1 квартал 2022 г.) и, вероятно, будет включено в Go 1.19 (3 ​​квартал 2022 г.).

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