我的存储库结构如下:-
xyz/src
1. abc
- p
- q
- r
2. def
- t
- u
- v
3. etc
- o
- m
- n
Run Code Online (Sandbox Code Playgroud)
我在 src 中创建了一个 .mod 文件并运行 go build ./... 除了本地包之外,一切都很好。因此,如果在 def 中使用 abc/p,则会抛出以下异常:- 找不到提供包 abc/p 的模块。将 .mod 文件保留在 src 包中的想法是确保从 mod 文件所在的位置找到路径。谁能建议 mod 文件理想的位置应该在哪里?我也尝试将其放在 xyz 上方的一个目录中,但仍然存在同样的问题,并且我为每个子目录创建了一个目录。我对此有点困惑。我是否必须为 abc 等创建单独的存储库。但考虑到早期用于相同工作的 gopath,我认为模块也应该能够执行相同的操作。有什么建议么?
最常见和最简单的方法是存储库中的单个 go.mod 文件,该单个 go.mod 文件放置在存储库的根目录中。
\n\nRuss Cox 在#26664中评论道:
\n\n\n\n\n对于除高级用户之外的所有用户,您可能希望采用通常的约定:一个存储库 = 一个模块。对于代码存储选项的长期发展来说,一个存储库可以包含多个模块非常重要,但这几乎肯定不是您默认想要做的事情。
\n
模块维基说:
\n\n\n\n\n例如,如果您正在为存储库创建一个模块
\ngithub.com/my/repo,该模块将包含两个带有导入路径的包github.com/my/repo/foo,github.com/my/repo/bar那么文件中的第一行go.mod通常会将您的模块路径声明为 \nmodule github.com/my/repo,以及相应的 on-磁盘结构\n可能是:
repo/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod <<<<< Note go.mod is located in repo root\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bar.go\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo.go\nRun Code Online (Sandbox Code Playgroud)\n\n在 Go 源代码中,包是使用包含模块路径的完整路径导入的。例如,如果一个模块在其 \n go.modas中声明了其身份module github.com/my/repo,则使用者可以执行以下操作:
import "example.com/my/repo/bar"\nRun Code Online (Sandbox Code Playgroud)\n\nbar从 module导入包github.com/my/repo。