Как запустить одноуровневые Go приложения (модули) из родительского каталога - PullRequest
0 голосов
/ 16 января 2020

У меня есть несколько Go проектов (и все они также Go модулей ), все в папке. Все они являются серверами HTTP и обмениваются вызовами REST, поэтому мне нужно, чтобы все они были запущены и запущены одновременно.

Итак, для локального тестирования я подумал, что было бы разумно вместо этого запускать все из родительского перемещения всех каталогов проекта root и запуска go run main.go на нескольких терминалах.

container_dir/
├── prj1/
│   ├── go.mod
│   ├── main.go
│   └── ...
├── prj2/
│   ├── go.mod
│   ├── main.go
│   └── ...
└── ...

Вот некоторые команды, которые я пробовал, и сообщения об ошибках для каждого времени:

container_dir $ go run ./*/*.go
##ERROR: named files must all be in one directory; have ./prj1/ and ./prj2/
container_dir $ go run *.go
##ERROR: stat *.go: no such file or directory
container_dir $ go run ./prj1 ./prj2/
##ERROR: cannot find package "github.com/jackc/pgx/v4" in any of:
           /usr/local/go/src/github.com/jackc/pgx/v4 (from $GOROOT)
           /home/user/go/src/github.com/jackc/pgx/v4 (from $GOPATH)
         cannot find package ...

Итак, я могу дать окончательный ответ на вопрос: Как запустить несколько go модулей в каталогах одного уровня, если они имеют какие-либо сторонние зависимости и т. Д. c.?

PS: По возможности с модулями Go предложение container_dir для моих проектов находится в произвольном месте, и я не ожидаю $GOPATH релевантности.

Go версия: 1.13. 6

Ответы [ 2 ]

4 голосов
/ 16 января 2020
  1. Не используйте go run вне крошечных тестов в стиле детской площадки
  2. Исходные пути являются проблемой времени компиляции и не имеют значения во время выполнения - нахождение в «каталогах одного уровня» не что-либо значить, когда программа работает
  3. go run запускает одну программу; точно так же, как сборка программы и запуск ее исполняемого двоичного файла (что делает go run), запускает одну программу.
0 голосов
/ 16 января 2020

Похоже, у вашего go .mod есть проблемы, чувак.

помните, что вы можете заменить внутри него и сослаться на другое приложение

module container_dir/prj2

go 1.13

require(
container_dir/prj1 v0.0.0
)

replace (
container_dir/prj1 => ../prj1
)

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

...