【发布时间】:2020-11-11 06:43:10
【问题描述】:
我在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 目录中很重要。
同样重要的是,我能够从项目的根目录中使用run 和build 我的代码(例如,.env 文件位于存储库的根目录中)。
因此,我正在从我的项目的根目录中寻找run 或build 我的代码在src 目录中的方法。
我尝试将go.mod 移动到项目的根目录并运行并运行go run ./src,但这会导致其自身的问题:
-
go命令现在无法定位internal和pkg中的所有子包 - VSCode 现在丢失了,由于某些原因无法执行测试(主要是因为没有找到所有子包)。
【问题讨论】:
-
我不知道为什么这个问题被严重否决了,真的。虽然它显示出缺乏关于 Go 的做什么和不做什么的基本知识,但我想说它的表述相当好,清楚地表明 OP 在发布之前进行了研究。
-
人们会期望像
go build ./src/...这样的东西可以工作,或者会有一个常见的选项意味着“这是我的go.mod所在的项目根目录,从这里开始工作” 喜欢go build --root src ./...,但显然我住在幻想世界。也许回退到一个好的老式Makefile并在那里编码你的目标和命令,包裹在(cd src; go build ./...)中。