Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
放置go.mod文件的位置_Go_Module - Fatal编程技术网

放置go.mod文件的位置

放置go.mod文件的位置,go,module,Go,Module,我的存储库结构如下:- xyz/src 1. abc - p - q - r 2. def - t - u - v 3. etc - o - m - n 我已经在src中创建了一个.mod文件并运行go build./。。。 除了当地的包裹,一切

我的存储库结构如下:-

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的模块。在src包中保留.mod文件的想法是确保从mod文件所在的位置找到路径。有人能建议mod文件应该放在哪里吗?我还试着把它放在xyz的上面一个目录中,但仍然有相同的问题,我为每个子目录创建了一个。我对此有点困惑。我将不得不为abc等创建单独的存储库。但考虑到之前用于相同的工作的gopath,我认为模块也应该能够这样做。有什么建议吗?

我的go应用程序根目录中有一个go.mod。我使用以下结构的灵感来自

现在我的一个应用程序是这样的

.
├── bin
├── cmd
│   ├── cli
│   └── server
│       └── main.go
├── pkg
│   ├── http
│   │   └── rest
|   │ # app-specific directories excluded
│   └── storage
│       └── sqlite
所有软件包都是通过其完整路径导入的,即导入“github.com/myusername/myapp/pkg/http/rest”,否则会导致到处都是问题,这是我不得不做的一个更改,从
$GOPATH
改为
go mod


go-mod
然后正确处理它发现的所有依赖项,直到我发现为止。

我的go应用程序根目录中只有一个go.mod。我使用以下结构的灵感来自

现在我的一个应用程序是这样的

.
├── bin
├── cmd
│   ├── cli
│   └── server
│       └── main.go
├── pkg
│   ├── http
│   │   └── rest
|   │ # app-specific directories excluded
│   └── storage
│       └── sqlite
所有软件包都是通过其完整路径导入的,即导入“github.com/myusername/myapp/pkg/http/rest”,否则会导致到处都是问题,这是我不得不做的一个更改,从
$GOPATH
改为
go mod


go-mod
然后就我所发现的情况而言,正确地处理它发现的所有依赖项。

最常见和最简单的方法是存储库中的单个go.mod文件,其中单个go.mod文件放在存储库的根目录中

罗斯·考克斯评论道:

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

模块wiki:

例如,如果要为存储库创建模块
github.com/my/repo
将包含两个具有导入路径的包
github.com/my/repo/foo
github.com/my/repo/bar
,然后是第一个
go.mod
文件中的行通常会将模块路径声明为
模块github.com/my/repo
,以及相应的磁盘结构 可以是:


从模块
github.com/my/repo
导入包
bar
,最常见和最简单的方法是存储库中的单个go.mod文件,其中单个go.mod文件放在存储库的根目录中

罗斯·考克斯评论道:

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

模块wiki:

例如,如果要为存储库创建模块
github.com/my/repo
将包含两个具有导入路径的包
github.com/my/repo/foo
github.com/my/repo/bar
,然后是第一个
go.mod
文件中的行通常会将模块路径声明为
模块github.com/my/repo
,以及相应的磁盘结构 可以是:


从模块
github.com/my/repo
导入的包
bar
abc/p
目录或文件?@Gavin它是一个包含go文件的目录,您将tho go.mod文件放在模块的根目录下。模块边界和源代码存储库不需要重叠。@Volker by root您在xyz中的意思是什么?这完全错了。xyz/src看起来像一个基于GOPATH的布局,当然不在xyz之下。请拿出一个可理解的真实fs结构。没有人可以讨论abc和xyz。再一次将go.mod放在模块的根目录下。如果xyz是一个模块:如果o是一个模块:把它放在那里。
abc/p
是一个目录还是文件?@Gavin它是一个目录,其中包含go文件。你把go.mod文件放在模块的根目录下。模块边界和源代码存储库不需要重叠。@Volker by root您在xyz中的意思是什么?这完全错了。xyz/src看起来像一个基于GOPATH的布局,当然不在xyz之下。请拿出一个可理解的真实fs结构。没有人可以讨论abc和xyz。再一次将go.mod放在模块的根目录下。如果xyz是一个模块:如果o是一个模块:把它放在那里。这个答案的问题是,在顶层,当它找不到pkg/下的源文件时,“go run cmd/server/main.go”就会爆炸。这个答案的问题是,在顶层,当它找不到pkg/下的源文件时,“go run cmd/server/main.go”就会爆炸。。。
import "example.com/my/repo/bar"