登录
首页 >  Golang >  Go问答

在具有多个模块的 mono-repos 中,Go 模块名称是否有约定?

来源:stackoverflow

时间:2024-04-26 14:42:34 114浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《在具有多个模块的 mono-repos 中,Go 模块名称是否有约定?》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

在多模块存储库中,模块名称(通过 go.mod module 指令设置)是否应该遵循包命名约定?

例如module github.com/org-name/repo-name/path/to/module-dir

我知道,无论模块的名称如何,模块内的包都会使用模块名称作为前缀来相互引用。但是,从模块外部来看,如果模块名称设置为 模式之外的其他名称,似乎会出现问题。 get-ing 模块中包含的包然后给出有关 unrecognized 导入路径 的消息。

是否有任何理由将模块命名为与 不同的名称?


解决方案


对于引用模块没有任何硬性要求,尽管使用域/存储库模式始终是一个很好的做法。因此,如果您想在本地引用不在 gopath 中的其他模块,可以使用 replace 指令。

https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive

replace 还可用于告知 go 工具多模块项目中模块在 >disk 上的相对或绝对位置,例如:

替换 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

你得到:

3

如果您希望能够 go get 模块,则应遵循 /repo/path/within/repo 模式。

但是,我建议退后一步,询问您是否真的想要一个多模块存储库。它增加了相当大的复杂性,很难做到正确,并且通常意味着需要持续进行更多工作。

russ cox 在 #26664 中评论:

更多详情,请参阅"Organize local code in packages using Go modules"

今天关于《在具有多个模块的 mono-repos 中,Go 模块名称是否有约定?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>