Как вложить один модуль Go в несколько модулей Go в качестве локальной зависимости - PullRequest
0 голосов
/ 20 октября 2019
$ 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 внутри обоих, потому что на go.mod может быть только одно объявление module.

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

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

1 Ответ

0 голосов
/ 20 октября 2019

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

Как

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 для разрешения.

...