[英]Where to place go.mod file
我有一个存储库结构如下:-
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,我认为模块也应该能够做到这一点。 有什么建议?
我的 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
到go mod
。
go mod
然后处理它正确发现的所有依赖项,就我目前发现的而言。
最常见和最简单的方法是在你的仓库,那里是一个go.mod文件放置在存储库的根单go.mod文件。
Russ Cox 在#26664 中评论道:
对于除高级用户之外的所有用户,您可能希望采用通常的约定,即一个 repo = 一个模块。 一个 repo可以包含多个模块,这对于代码存储选项的长期发展很重要,但几乎可以肯定,默认情况下你不想这样做。
模块维基说:
例如,如果您正在为存储库
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 github.com/my/repo
,则消费者可以执行以下操作:
import "example.com/my/repo/bar"
从模块github.com/my/repo
导入包bar
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.