首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将旧go项目升级为使用go模块

将旧go项目升级为使用go模块
EN

Stack Overflow用户
提问于 2021-07-01 05:38:09
回答 1查看 666关注 0票数 2

我的$GOPATH包含3个位置

  1. /home//文件/gotree
  2. /home//Documents/perforce/modules/thirdparty/golibs
  3. /home/Documents/perforce/模块/sggolibs/

在这里,位置1用于一般用途,位置2和3用于与工作相关的库,这些库是在一个perforce服务器上维护的。这最后两个图书馆是绝对保持这样的任何人在公司应该使用这些确切的版本,而不是图书馆的最新版本的互联网。

在其他位置,有几台go服务器,它们都在使用来自$GOPATH location 2和3的至少一个库。

所有这些服务器都是2,3年前编写的,不包含任何go.mod或任何包管理项。

我的问题是如何将所有这些服务器升级到最新版本go,以便它能够与go模块一起工作,并可能将供应商目录升级到第三方库?

如果我的问题太笼统的话,很抱歉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-01 14:49:24

不幸的是,Perforce不是go命令中本机支持的go之一,因此您可能需要应用一些脚本或工具,以便从Perforce存储库中插入库。

一种选择是设置一个模块代理以服务于Perforce的依赖项,并让您的开发人员设置GOPROXYGONOSUMDB 环境变量,以便他们使用该代理而不是(或除了)默认值(proxy.golang.org,direct)。

请注意,Go模块计算和存储依赖项的校验和,因此,如果您修改了任何第三方依赖项,那么任何修改都必须使用唯一的版本字符串(或不同的模块路径!)这样它们就不会与内容不同的上游版本发生冲突。(我似乎还记得,阿森斯代理支持过滤和/或注入模块,尽管我不太熟悉它的功能或配置。)

我现在还不知道支持Perforce的Go模块代理实现,但是您可能会反复检查https://pkg.go.dev/search?q=%22module+proxy%22以确定;至少有一些可以用作参考的实现。该协议有意地非常简单,因此希望实现它不会有很大的工作量。

另一种选择--短期内工作可能较少,但长期而言更多--是在每个模块中使用指令来替换每个Perforce托管的依赖项的源代码,并使用相应的文件系统路径。您可能可以编写一个小脚本来自动化该过程;go mod edit命令旨在支持这种脚本。

替换模块需要有go.mod文件(以减少由于键入而造成的混乱),因此,如果您选择这种方法,您可能需要在一个或多个Perforce目录中运行go mod init来创建它们。

使用上述两种方法之一,最简单的方法可能是在您的第一个存储库中尽可能少地使用模块:理想情况下,只在包树的根处启动一个模块。您可以在那里运行go mod init,然后设置您的replace指令和/或本地代理,然后运行go mod tidy来填充依赖关系图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68204832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档