繁体   English   中英

在哪里放置 go.mod 文件

[英]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" ,否则它会导致所有的地方的问题,这是一个改变我不得不做出从去$GOPATHgo mod

go mod然后处理它正确发现的所有依赖项,就我目前发现的而言。

最常见和最简单的方法是在你的仓库,那里是一个go.mod文件放置在存储库的根单go.mod文件

Russ Cox 在#26664 中评论道:

对于除高级用户之外的所有用户,您可能希望采用通常的约定,即一个 repo = 一个模块。 一个 repo可以包含多个模块,这对于代码存储选项的长期发展很重要,但几乎可以肯定,默认情况下你不想这样做。

模块维基

例如,如果您正在为存储库github.com/my/repo创建一个模块,该模块将包含两个导入路径为github.com/my/repo/foogithub.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM