放置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"