我的项目结构如下,位于GOPATH
之外。
. // Project root
├── Dockerfile
├── .env
├── README.md
└── src
├── main.go
├── go.mod
├── go.sum
├── internal
│ ├── somepackage
│ │ ├── main.go
│ │ └── types.go
│ ├── someother
│ │ ├── main.go
│ │ ├── oauth.go
│ │ └── types.go
│ └── models
│ └── main.go
└── pkg
├── somepackage
│ └── main.go
└── anotherpackage
└── main.go
我想运行位于 src
目录中的 Go 模块代码。
当我使用 cd
命令进入 src
目录并执行 go run .
或 go build .
命令时,我的代码能够正常工作。
当我站在项目的根目录下时,我无法执行 go run ./src
或 go build ./src
命令。我会收到以下错误提示:
src/service.go:8:2: cannot find package "web-service/internal/auth" in any of:
/usr/lib/go/src/web-service/internal/auth (from $GOROOT)
/home/miloertas/Packages/go/src/web-service/internal/auth (from $GOPATH)
src/endpoints.go:3:8: cannot find package "web-service/internal/handlers" in any of:
/usr/lib/go/src/web-service/internal/handlers (from $GOROOT)
/home/miloertas/Packages/go/src/web-service/internal/handlers (from $GOPATH)
重要的是我的源代码仍然保留在这个
src
目录中。同样重要的是,我能够从项目的根目录运行和构建我的代码(例如,.env
文件位于存储库的根目录)。因此,我正在寻找一种方法,可以从项目的根目录中的
src
目录下运行或构建我的代码。我尝试将根目录中的
go.mod
移动到 src
目录并运行命令 go run ./src
,但这会引起一些问题:-
go
命令现在无法定位所有位于 internal
和 pkg
中的子包。
- VSCode 现在迷失方向,由于找不到所有子包,执行测试变得不可能。
go build ./src/...
这样的命令可以工作,或者有一个通用选项表示“这是我的 go.mod 所在的项目根目录,请从这里开始工作”,例如go build --root src ./...
,但显然我生活在幻想世界中。也许退而求其次,使用一个好老式的Makefile
,在其中编写你的目标和命令,包装成(cd src; go build ./...)
。 - Ed Randall