Как вложить один модуль Go в несколько модулей Go как локальную зависимость

$ go version
1.13.3

У меня структура папок следующая:

GOPATH
+---src
     +--- my-api-server
           +--- my-auth-server
                 +--- main.go
                 +--- go.mod
                 +--- go.sum
           +--- my-utils
                 +--- go.mod
                 +--- go.sum
                 +--- uuid
                       +--- uuid.go

my-auth-server использует my-api-server/my-utils/uuid как зависимость

Я попытался переместить my-utils внутрь my-auth-server, но как библиотека my-utils будет использоваться в нескольких местах.

Теперь my-utils также имеет go.mod, но содержит объявление module. Если я помещу его в my-auth-server, путь к модулю станет my-api-server/my-auth-server/my-utils

Если у меня 2 сервера,

  • my-auth-server
  • my-session-server

Я не могу поместить my-utils внутри обоих, потому что может быть только одно module объявление на go.mod.

Итак, как я использую это в двух разных проектах в качестве подмодуля?

Любая помощь в решении этой проблемы также будет оценена.


person Ayush Gupta    schedule 20.10.2019    source источник


Ответы (1)


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

Нравиться

GOPATH
+---src
     +--- my-api-server
           +--- my-auth-server
                 +--- main.go
                 +--- go.mod
                 +--- go.sum
     +--- my-utils
          +--- go.mod
          +--- go.sum
          +--- uuid
               +--- uuid.go

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

Нравится

GOPATH
+---src
     +--- my-api-server
           +--- my-auth-server
                 +--- main.go
                 +--- go.mod
                 +--- go.sum
                 +--- my-utils
                      +--- uuid
                           +--- uuid.go

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

Также, возможно, вы это знаете, но поскольку вы используете модули, вам нужно сидеть в GOPATH / GOROOT для разрешения.

person jazz    schedule 20.10.2019