简体   繁体   中英

How to run sibling Go applications (modules) from the parent directory

I have multiple Go projects (and all of them are also Go modules ) all in a folder. They are all HTTP servers and exchanging REST calls, thus, I need all of them up and running simultaneously.

So, for local testing purposes, I thought it would be reasonable to run all of them from the parent instead of moving all of the project root directories and running go run main.go in multiple terminals.

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

Here are some some commands I have tried and the error messages for each time:

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 ...

So, I can give a final rephase for the question: How to run multiple go modules in sibling directories when they have some third party dependencies etc.?

PS: As possible with Go modules suggest container_dir for my projects is in an arbitrary location and I expect no $GOPATH relevance.

Go version: 1.13.6

  1. Don't use go run outside of tiny, playground-style tests
  2. Source paths are a compile-time concern and are irrelevant at runtime - being in "sibling directories" doesn't mean anything when the program is running
  3. go run runs a single program; just like building a program and running its executable binary (which is what go run does) runs a single program.

Looks like your go.mod stuff is having problems dude.

remember you can do replace inside it and reference your other application

module container_dir/prj2

go 1.13

require(
container_dir/prj1 v0.0.0
)

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

require is the path you import but it'll get switched to the relative path on build.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM