在具有多个模块的mono repos中,Go模块名称是否有约定?
在多模块存储库中,模块名称(通过go.mod在具有多个模块的mono repos中,Go模块名称是否有约定?,go,go-modules,Go,Go Modules,在多模块存储库中,模块名称(通过go.modmodule指令设置)是否应遵循包命名的约定 例如,module github.com/org name/repo name/path/to/module dir 我理解,无论模块名如何,模块内的包都使用模块名作为前缀相互引用。但是,从模块外部看,如果模块名称设置为非模式,则似乎会出现问题获取-加载模块中包含的包后,会显示有关无法识别的导入路径的消息 是否有任何理由将模块命名为与不同的名称?引用模块没有任何硬性要求,尽管使用域/repo模式始终是一种良
module
指令设置)是否应遵循包命名的约定
例如,module github.com/org name/repo name/path/to/module dir
我理解,无论模块名如何,模块内的包都使用模块名作为前缀相互引用。但是,从模块外部看,如果模块名称设置为非
模式,则似乎会出现问题<代码>获取-加载模块中包含的包后,会显示有关无法识别的导入路径的消息
是否有任何理由将模块命名为与
不同的名称?引用模块没有任何硬性要求,尽管使用域/repo模式始终是一种良好的做法。因此,如果要在本地引用不在GOPATH中的其他模块,可以使用replace
指令
replace还可用于通知go工具多模块项目中模块的相对或绝对磁盘位置,例如:
替换example.com/project/foo=>../foo
假设我们有以下结构:
├── .gitignore
├── pkg1
│ ├── go.mod
│ └── main.go
└── pkg2
├── go.mod
└── utils.go
pkg1/main.go
package main
import (
"fmt"
"local/pkg2"
)
func main() {
fmt.Println(pkg2.Add(1, 2))
}
pkg1/go.mod
module local/pkg1
go 1.12
require local/pkg2 v0.0.0
replace local/pkg2 => ../pkg2
pkg2/utils.go
package pkg2
func Add(a, b int) int {
return a + b
}
pkg2/go.mod
module local/pkg2
go 1.12
运行:
cd pkg1
go run main.go
你会得到:
三,
如果您希望能够
获取
模块,它应该遵循/repo/path/in/repo
模式
然而,我建议退一步,问问你是否真的想要多模块回购。它增加了实质性的复杂性,很难做到正确,通常意味着要持续进行更多的工作
罗斯·考克斯评论道:
对于除超级用户以外的所有用户,您可能希望采用通常的约定,即一个回购=一个模块。回购协议可以包含多个模块,这对于代码存储选项的长期发展很重要,但在默认情况下,这几乎肯定不是您想要做的事情
有关更多详细信息,请参阅