我的存储库结构如下:-
xyz/src
1. abc
- p
- q
- r
2. def
- t
- u
- v
3. etc
- o
- m
- n
我已经在src中创建了一个.mod文件并运行go build。/ ... 除了本地软件包,其他都不错。因此,如果在def中使用了abc / p,那么它将引发以下异常:-无法找到提供软件包abc / p的模块。将.mod文件保存在src包中的想法是确保从mod文件所在的位置找到路径。任何人都可以建议理想情况下mod文件应该在哪里?我也尝试将其放置在xyz上方的一个目录中,但仍然存在相同的问题,并且我为每个子目录创建了一个目录。我对此感到困惑。我是否必须为abc等创建单独的存储库。但是考虑到以前用于相同路径的gopath,我认为模块也应该能够做到这一点。有什么建议吗?
答案 0 :(得分:0)
我的go应用程序的根目录中只有一个go.mod。我使用的是受Kat Zien - How Do You Structure Your Go Apps
启发的以下结构目前我的应用程序之一如下
.
├── bin
├── cmd
│ ├── cli
│ └── server
│ └── main.go
├── pkg
│ ├── http
│ │ └── rest
| │ # app-specific directories excluded
│ └── storage
│ └── sqlite
所有软件包都是通过完整路径导入的,即import "github.com/myusername/myapp/pkg/http/rest"
,否则会在整个地方引起问题,并且这是我从$GOPATH
到{{1 }}。
go mod
然后处理它到目前为止我发现的所有正确依赖项。
答案 1 :(得分:0)
最常见和最简单的方法是在存储库中使用单个go.mod
文件,该单个go.mod
文件位于存储库的根目录中。
Russ Cox在#26664中发表了评论:
对于除高级用户以外的所有用户,您可能希望采用一种惯例,即一个仓库=一个模块。存储库可以包含多个模块对于代码存储选项的长期发展很重要,但是默认情况下,您肯定不需要这样做。
模块Wiki says:
例如,如果要为存储库创建模块
github.com/my/repo
将包含两个带有导入路径的软件包github.com/my/repo/foo
和github.com/my/repo/bar
,然后是第一个go.mod
文件中的一行通常会声明您的模块路径为module github.com/my/repo
,以及相应的磁盘结构 可能是:
repo/
├── go.mod <<<<< Note go.mod is located in repo root
├── bar
│ └── bar.go
└── foo
└── foo.go
在Go源代码中,使用以下完整路径导入包: 模块路径。例如,如果某个模块在其内部声明了其身份
go.mod
与module example.com/my/module
一样,消费者可以这样做:
import "example.com/my/module/mypkg"
这将从模块
mypkg
中导入软件包example.com/my/module
。