Несколько модулей в одном проекте - PullRequest
0 голосов
/ 07 марта 2019

Я играл с модулями Go, и мне было интересно, как лучше всего использовать следующую структуру каталогов:

project
├── go.mod
├── main.go
└── players
    ├── go.mod
    ├── players.go
    └── players_test.go

Сначала у меня были проблемы с импортом пакета players в мой корневой проект, но я заметил, что могу сделать это в корневом go.mod файле

module github.com/<name>/<project>

require (
    github.com/<name>/players v0.0.0
)

replace github.com/<name>/players => ./players

Это позволяет мне сделать import "github.com/<name>/players" в моем файле main.go.

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

Другой вариант, который кажется немного излишним, - сделать каждый модуль своим собственным хранилищем?

TL; DR; - Как лучше всего использовать несколько модулей в одном репозитории и импортировать их в другие модули / корневой файл main.go?

1 Ответ

3 голосов
/ 07 марта 2019

В общем случае модуль должен представлять собой набор пакетов.

Но все же вы можете создавать модули из отдельных пакетов.Как сказал Volker , это может иметь смысл, только если вы хотите, чтобы эти пакеты имели другой жизненный цикл.Это также может иметь смысл, если вы хотите импортировать эти модули из другого проекта и не хотите использовать служебные данные для всей коллекции пакетов.

В общем:

Модульпредставляет собой набор связанных пакетов Go, версии которых объединены в единое целое.

Модули записывают точные требования к зависимостям и создают воспроизводимые сборки.

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

Обобщение отношений между репозиториями, модулями и пакетами:

  1. Хранилище содержит один или несколько модулей Go.
  2. Каждый модуль содержит один или несколько пакетов Go.
  3. Каждый пакет состоит из одного или нескольких исходных файлов Go в одном каталоге.

ИсточникЦитата: https://github.com/golang/go/wiki/Modules#modules

Чтобы ответить на вопрос:

Вы можете сделать это так, как вы показали в своем подходе:

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