GO语言(二十七)管理依赖项(下)
需要来自您自己的存储库分支的外部模块代码
当您对外部模块的存储库进行了 fork (例如修复模块代码中的问题或添加功能)时,您可以让 Go 工具将您的 fork 用于模块的源代码。这对于测试您自己的代码的更改很有用。
为此,您可以使用go.mod 文件中的replace指令将外部模块的原始模块路径替换为存储库中 fork 的路径。这指示 Go 工具在编译时使用替换路径(fork 的位置),例如,同时允许您保留import 原始模块路径中的语句不变。
在以下 go.mod 文件示例中,当前模块需要外部模块example.com/theirmodule。然后该replace指令将原始模块路径替换为example.com/myfork/theirmodule模块自己的存储库的分支。 module example.com/mymodule go 1.16 require example.com/theirmodule v1.2.3 replace example.com/theirmodule v1.2.3 => example.com/myfork/theirmodule v1.2.3-fixed
设置require/replace对时,使用 Go 工具命令确保文件描述的需求保持一致。使用go list命令获取当前模块正在使用的版本。然后使用go mod edit命令将需要的模块替换为fork: $ go list -m example.com/theirmodule example.com/theirmodule v1.2.3 $ go mod edit -replace=example.com/theirmodule@v1.2.3=example.com/myfork/theirmodule@v1.2.3-fixed
注意: 当您使用该replace指令时,Go 工具不会像添加依赖项中所述对外部模块进行身份验证。
使用存储库标识符获取特定提交
您可以使用go get命令从其存储库中的特定提交为模块添加未发布的代码。
为此,您使用go get命令,用符号@指定您想要的代码 。当您使用go get时,该命令将向您的 go.mod 文件添加一个 需要外部模块的require指令,使用基于有关提交的详细信息的伪版本号。
以下示例提供了一些说明。这些基于源位于 git 存储库中的模块。 要在特定提交处获取模块,请附加表单 @ commithash : $ go get example.com/theirmodule@4cf76c2要在特定分支获取模块,请附加表单 @branchname : $ go get example.com/theirmodule@bugfixes
删除依赖项
当您的代码不再使用模块中的任何包时,您可以停止将该模块作为依赖项进行跟踪。
要停止跟踪所有未使用的模块,请运行go mod tidy 命令。此命令还可能添加在模块中构建包所需的缺失依赖项。 $ go mod tidy
要删除特定依赖项,请使用go get,指定模块的模块路径并附加 @none,如下例所示: $ go get example.com/theirmodule@none
go get命令还将降级或删除依赖于已删除模块的其他依赖项。
指定模块代理服务器
当您使用 Go 工具处理模块时,这些工具默认从 proxy.golang.org(一个公共的 Google 运行的模块镜像)或直接从模块的存储库下载模块。您可以指定 Go 工具应该使用另一个代理服务器来下载和验证模块。
如果您(或您的团队)已经设置或选择了您想要使用的不同模块代理服务器,您可能想要这样做。例如,有些人设置了模块代理服务器,以便更好地控制依赖项的使用方式。
要为 Go 工具指定另一个模块代理服务器,请将GOPROXY 环境变量设置为一个或多个服务器的 URL。Go 工具将按照您指定的顺序尝试每个 URL。默认情况下,GOPROXY首先指定一个公共的 Google 运行模块代理,然后从模块的存储库直接下载(在其模块路径中指定): GOPROXY="https://proxy.golang.org,direct"
您可以将变量设置为其他模块代理服务器的 URL,用逗号或管道分隔 URL。 使用逗号时,Go 工具仅在当前 URL 返回 HTTP 404 或 410 时才会尝试列表中的下一个 URL。 GOPROXY="https://proxy.example.com,https://proxy2.example.com"
当您使用管道时,Go 工具将尝试列表中的下一个 URL,而不管 HTTP 错误代码如何。 GOPROXY="https://proxy.example.com|https://proxy2.example.com"
Go 模块经常在公共互联网上不可用的版本控制服务器和模块代理上开发和分发。您可以设置 GOPRIVATE环境变量。您可以设置GOPRIVATE环境变量来配置go命令以从私有源下载和构建模块。然后 go 命令可以从私有源下载和构建模块。
GOPRIVATE或环境变量可以设置为匹配模块前缀的全局模式列表,这些GONOPROXY前缀是私有的,不应从任何代理请求。例如: GOPRIVATE=*.corp.example.com,*.research.example.com
荣耀Magic3和小米IMX4怎么选择购机?肯定先MIX4如今这两款你手机都发布了,小米mix4手机更多是小米的科技探索的产品,而荣耀Magic3系列是针对荣耀的高端手机探索的产品!小米mix4更多强调的是手机的性能优势以及
全球变暖会不会引发新仙女木事件呢?首先介绍一个概念温盐环流。这个神奇的环流,保护着地球能量的平衡。来,我们继续来脑洞大开,做这样一个逆向的思考。假设,全球的气温升高了。会怎么样呢?极地的冰化了!冰水,没有那么咸,对
七夕节你还在送口红香水吗?七夕给心爱的TA送什么礼物呢?口红?香水?拜托,不要这么直男了,好吗?今年七夕,为生活在数码时代的TA送上一份怎样的礼物呢,我们为你做了这些选择,你能选上吗?无线桌面音箱篇桌面音箱
优势大盘点!iOS对比安卓,究竟哪点更强?前文我们说到,虽然iOS很优秀,但在市场占有率上一直是敌不过安卓的,我也简单分析了一下安卓系统在体验上有什么优势。但iOS一直没有被占据,也是有一定优势所在的,现在咱们再来说说,i
2021下半年,TWS真无线耳机主打降噪还好使吗?雷柏Ti100现身说法实话实说啊,2021下半年的TWS有什么新东西吗?好像有,又好像没有。高端耳机都在收窄用户群体,主打自己的生态,而普通用户购买第三方适配的TWS真无线耳机,除了蓝牙5。1低延迟和单
iQOONeo5深度评测高帧闪充,手握两大利刃如今的手机市场对于游戏爱好者来说其实很友好了,如果你没有追求顶级旗舰的执念,实际上在2K左右的价位就已经能够买到一部流畅玩游戏的次旗舰机型。这得益于前几年高端硬件的下放大趋势,主打
蒸烤消储,双腔同步!PConline权威测评金帝双腔蒸烤消集成灶在房价高涨的当下,寸土寸金的住房面积让厨房空间一步步被压缩,但小巧的厨房并不能阻止我们对美好生活的追求,洗碗机蒸烤箱消毒柜还有各式各样的家电产品在为我们打造品质生活的同时,也让本就
美国能管住比特币吗?比特币去中心化,所以美国没法换。第一点比特币等虚拟货币。美元计价,可以蓄水美国超发的美元。这点无疑美国是非常喜欢的。蓄水,震旦,收割。完美!第二点比特币作为一种去中心化的商品。可以
荣耀magic3系列magic3pro超乎想象优化的888plus超级的拍照性能百倍变焦88的tof对焦百倍长焦I68的防水防尘magicui5。0还有我最喜欢的3D前置镜头和华为一模一样悄悄告诉你注
人类高质量七夕送礼攻略!从手机潮品到美妆都有,女生看了会心动距离七夕节越来越近,想必不少男同胞都在精心为女神准备礼物中,但往往不少直男也犯了难今年又该送什么?其实对于这个一年一度的传统情人节,女同胞们可不希望接收的礼物很传统,毕竟现在新兴消
腾讯音乐失去独家版权,网易云却准备上市,丁磊的机会来了?中国数字音乐的发展已经走过了十多年的历程,人们听音乐的渠道和方式都多了很多。说到国内数字音乐市场的大佬,深受90后00后欢迎的网易云音乐和财大气粗拥有众多音乐版权的腾讯音乐当仁不让