在多模块存储库中,模块名称(通过 go.modmodule指令设置)是否应该遵循包命名约定?
例如 module github.com/org-name/repo-name/path/to/module-dir
我明白,无论模块的名称如何,模块中的包都使用模块名称作为前缀相互引用。但是,从模块外部来看,如果模块名称设置为<host><path-within-repo>模式以外的其他内容,则似乎存在问题。get-ing 包含在模块中的包然后给出关于unrecognized import path.
是否有任何原因以不同的方式命名模块<host><path-within-repo>?
尽管使用域/存储库模式始终是良好的做法,但引用模块没有任何硬性要求。因此,如果你想在本地引用不在 GOPATH 中的其他模块,你可以使用该replace指令。
https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive
\n\n\nReplace 还可用于通知 go 工具多模块项目中模块的相对或绝对磁盘位置,例如:
\n替换 example.com/project/foo => ../foo
\n
假设我们有以下结构:
\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .gitignore\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pkg1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.go\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pkg2\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 utils.go\nRun Code Online (Sandbox Code Playgroud)\npkg1/main.go
\npackage main\n\nimport (\n "fmt"\n "local/pkg2"\n)\n\nfunc main() {\n fmt.Println(pkg2.Add(1, 2))\n\n}\nRun Code Online (Sandbox Code Playgroud)\npkg1/go.mod
\nmodule local/pkg1\n\ngo 1.12\n\nrequire local/pkg2 v0.0.0\n\nreplace local/pkg2 => ../pkg2\nRun Code Online (Sandbox Code Playgroud)\npkg2/utils.go
\npackage pkg2\n\nfunc Add(a, b int) int {\n return a + b\n}\nRun Code Online (Sandbox Code Playgroud)\npkg2/go.mod
\nmodule local/pkg2\n\ngo 1.12\nRun Code Online (Sandbox Code Playgroud)\n跑步:
\ncd pkg1\ngo run main.go\nRun Code Online (Sandbox Code Playgroud)\n你得到:
\n\n\n3
\n
| 归档时间: |
|
| 查看次数: |
4069 次 |
| 最近记录: |