登录
首页 >  Golang >  Go问答

Go 模块支持多个导入路径

来源:stackoverflow

时间:2024-02-08 12:09:23 303浏览 收藏

大家好,今天本人给大家带来文章《Go 模块支持多个导入路径》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我有一个镜像到多个位置的 go 模块。一个在 gitlab 中,另一个在 bitbucket 中。当尝试将其基于新的 gitlab 位置时,我得到:

go: gitlab.com/company/[email protected]: parsing go.mod:
module declares its path as: bitbucket.org/company/core
but was required as: gitlab.com/company/core

我知道为什么会发生这种情况,但是我如何将我的 go.mod 定义为“或”?


正确答案


简短回答:你不能

但一切也许都不会失去......

如果您在模块路径引用的位置和由于某种原因您更喜欢从中下载的其他位置都有代码,则可以配置 git alias 将引用从指定的模块路径重定向到所需的下载来源:

git config --global --add url."https://".insteadof "https://"

别名不必完全替换。您可以使用别名来替换任何模块路径上的前缀。因此,如果您在服务器 x 上托管了许多已在服务器 y 上识别(在其模块路径中)的模块,则只需为该服务器添加别名即可主机前缀和路径覆盖所有这些模块(只要存储库名称相同)。

例如,我们使用它为本地 azuredevops server git 存储库中托管的模块创建“友好”模块路径,例如:

git config --global --add url."https://tfs.myorg.com/myorgcollection/_git".insteadof "https://tfs.myorg.com"

然后,我们的模块就能够将自己标识为 tfs.myorg.com/somemodule.git ,但是当 go get 尝试获取此 git 时,它将在 https://tfs.myorg.com/myorgcollection/_git/somemodule 中查找它.git

.git 后缀是必要的 azure devops 特性

说实话,我还没有在完全不同的服务器上尝试过这个,只是为了在同一服务器上“重写”路径,但原则上它应该可以工作。所以在你的情况下:

git config --global --add url."https://gitlab.com/company/".insteadof "https://bitbucket.org/company/"

因为这适用于 git 级别的事物,就 go 而言,它仍然从 bitbucket.org 获取,即使 git 将在后台访问 gitlab.com

即当您 go get 时,您需要引用声明的模块路径:

go get bitbucket.org/company/core

这样做的唯一缺点是,您需要在任何/所有工作站(和构建机器)上配置别名,这些工作站需要从模块路径中声明的位置以外的任何位置 go get

终于介绍完啦!小伙伴们,这篇关于《Go 模块支持多个导入路径》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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