go - 如何从 gitlab 子组加载模块?
问题描述
我写了一个程序,想封装一些逻辑。
所以我做了新模块并将其拉入我的git。git 的链接看起来像 gitlab.xxx.ru/group/subgroup/proj 但是当我尝试使用 go get 获取它时,我得到了错误
fatal: «https://xxx.ru:@gitlab.xxx.ru/group/subgroup.git/» unreachable: URL using bad/illegal format or missing URL
去尝试加载子组而不是项目。
我在 $GOPATH/src/ 中创建了文件夹 gitlab.xxx.ru/group/subgroup/ 并克隆了我的项目。
现在它写了
could not import gitlab.xxx.ru/group/subgroup/proj (no required module provides package "gitlab.xxx.ru/group/subgroup/proj")
所以,如果我理解正确的话,在 Golang 1.16 中我不能只将我的项目放在正确的目录中,也不能使用本地包。
如何修复从我的 GitLab 加载并使用 ssh 加载它?
谢谢你。
我的项目中的 UDP go.mod。
module gitlab.xxx.ru/group/subgroup/proj
go 1.16
require (
golang.org/x/sys v0.0.0-20210608053332-aa57babbf139
golang.org/x/text v0.3.6
)
解决方案
您可能会遇到 Gitlab 的预期行为,这将阻止 go 在尝试计算项目依赖项时获取子组列表。由于go get
请求未经身份验证,因此不在根组下的现有项目是不可见的,无法找到。
为了克服这个 Gitlab 尚未提供解决方案的限制,您可以使用以下两种方法之一:
- 让项目位于根目录而不是子组中(并非总是可能)
- 在导入模块的项目中利用
.git
扩展和替换指令(见下文)
如果 Go 知道版本控制限定符 (.git),则它能够获取位于子组下的项目。为了表明这一点,请确保使用以下格式导入项目gitlab.xxx.ru/group/subgroup/proj.git
虽然仅此一项有效,但它会迫使您将所有这些都包含.git
在您的导入中。为了克服这个问题,您还需要一个replace
指令,go.mod
以便您可以使用原始导入路径。
最后,导入你的模块的项目应该是go.mod
这样的:
require(
gitlab.xxx.ru/group/subgroup/proj v1.7.0
)
replace(
gitlab.xxx.ru/group/subgroup/proj => gitlab.xxx.ru/group/subgroup/proj.git v1.7.0
)
推荐阅读
- c++ - 为什么 int x{ y = 5 } 可能?
- html - 盒子定位包装
- php - DataFixtures phpunit symfony 类型的预期值改为“整数”
- reactjs - 常规函数中的 Redux 钩子(钩子规则)
- sql - SQL:聚合总和和过滤的聚合总和
- api - Laravel 6 单元测试响应 401
- java - 碎片内存泄漏
- angularjs - SpringBoot AngularJS webSocket 集成
- sql - 如何从 SQL SERVER 中的日期时间戳的时间部分创建一天的四分之一
- angular - 如果存在显示警报,如何编写条件,否则添加到列表