go.mod文件的放置位置

时间:2018-10-16 17:05:14

标签: go module

我的存储库结构如下:-

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,我认为模块也应该能够做到这一点。有什么建议吗?

2 个答案:

答案 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/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.modmodule example.com/my/module一样,消费者可以这样做:

import "example.com/my/module/mypkg"
  

这将从模块mypkg中导入软件包example.com/my/module