Go语言公司gitlab私有仓库依赖拉取配置的两种实现方式

 更新时间:2025年11月02日 10:07:35   作者:li_zehao  
文章主要介绍了如何在Go语言中管理私有仓库依赖,Go语言目前使用官方的gomodules来管理依赖,对于公有仓库使用goget直接操作即可,但私有仓库则需要额外的配置,下面就来详细的介绍一下如何配置,感兴趣的可以了解一下

为什么要考虑私有仓库

Go语言目前都已经采用了官方统一的 go modules 来管理依赖,后续也不太可能出现比较乱的生态, 因此了解下如何让这个依赖管理正常工作是非常必要的。

对于Github或者其他公有仓库,依赖管理是非常直接和方便的,设置好GOPROXY后,使用 go get去直接操作依赖,是不会报错的,很方便直接, 但是对于一些公司或者组织,一些代码不能公开的, 那就涉及到私有依赖管理了, 通常而言,直接使用go get 肯定会报错,去网上搜搜也不太全,设置完git url替换 之后,依然会报错。 本文主要是讲述,如何进行开发设置而不报错。

对于没有子目录的gitlab项目

如下面这种方式:

# 仓库地址
https://gitlab.com/group/project

# gomodule 名称为
gitlab.com/group/project

可以使用如下命令进行设置, 设置完成之后,则可以通过 go get自动获取到依赖

# 设置GOPRIVATE环境变量
go env -w  GOPRIVATE=gitlab.com
go env -w  GOPRIVATE=gitlab.bitmartpro.com

# 设置URL替换,把https转为ssh获取依赖
git config --global url."git@gitlab.com".insteadOf "https://gitlab.com"
git config --global url."git@gitlab.bitmartpro.com:".insteadOf "https://gitlab.bitmartpro.com/"

# 如果遇到https报错,可以设置如下,如果本身就是正常的https就不用去管了
git config --global http.sslVerify false

按照如上方法设置一下,你就能轻松通过 go get来获取到私有的依赖,但这种方式有一个弊端,就是如果项目放在子目录下面,则依赖获取仍然会失败,下面就会讲一下两种在子目录存在的情况下,如何正常去获取私有依赖的方法。

对于子目录的gitlab项目

如下面这种方式

# 项目地址
https://gitlab.com/group/subgroup/project

# go module 名称
gitlab.com/group/subgroup/project

即使我们设置了正常的ssh key,和git的url替换,仍然会得到报错

The project you were looking for could not be found or you don't have permissions to view it. 

当我们用搜索引擎去搜去解决问题的时候,我们基本上搜到的结果都是让你去改 go module 的名称,如下

rm go.mod go.sum
go mod init gitlab.com/myuser/foogroup/barlib.git
go mod tidy
 
cd /go/src/another_project
go get gitlab.com/myuser/foogroup/barlib.git

它要求,必须要以 .git结尾,这样是一种比较简单的解决方案,但是正常的go module 命名一般是不带 .git 结尾的。 发生这种情况的原因是,它go get尝试发现给定路径上的模块以找到请求的 Go 模块存储库。只有找到存储库后,工具才会执行git clone或git checkout使用 SSH 密钥进行身份验证。问题归结为这样一个事实:如果没有 Gitlab 访问令牌,就无法列出/查看私有Gitlab 子组。 所以这个时候,我们就要用到下面这种方法。

  1. 在gitlab中创建token Gitlab->Preferences->Access Tokens
  2. 对于windows系统, 你可以先设置一个HOME的环境变量,指向你的用户目录,然后在用户目录下创建 _netrc文件; 对于Mac/Linux 则可以直接创建 ~/.netrc 文件
  3. 按照如下方式编辑 ~/.netrc 文件
machine gitlab.com
    login my_gitlab_username
    password my_gitlab_token
  • 上述machine是指你的gitlab仓库的地址
  • login 则为你的gitlab的用户名
  • password就是第一步创建的gitlab访问token

结合如上几种方式,你应该可以完整的解决掉你的go 获取私有依赖的问题。

到此这篇关于Go语言公司gitlab私有仓库依赖拉取配置的文章就介绍到这了,更多相关Go语言 gitlab私有仓库依赖拉取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang设计模式中抽象工厂模式详细讲解

    Golang设计模式中抽象工厂模式详细讲解

    抽象工厂模式用于生成产品族的工厂,所生成的对象是有关联的。如果抽象工厂退化成生成的对象无关联则成为工厂函数模式。比如本例子中使用RDB和XML存储订单信息,抽象工厂分别能生成相关的主订单信息和订单详情信息
    2023-01-01
  • 详解Go语言的错误处理和资源管理

    详解Go语言的错误处理和资源管理

    资源处理是什么?打开文件需要关闭,打开数据库连接,连接需要释放。这些成对出现的就是资源管理。有时候我们虽然释放了,但是程序在中间出错了,那么可能导致资源释放失败。如何保证打开的文件一定会被关闭呢?这就是资源管理与错误处理考虑的一个原因
    2021-06-06
  • go同步原语Phaser和Barrier区别

    go同步原语Phaser和Barrier区别

    这篇文章主要为大家介绍了通过java讲解go同步原语Phaser和Barrier区别,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Golang中的int类型和uint类型到底有多大?

    Golang中的int类型和uint类型到底有多大?

    int和uint类型在我们日常开发中经常会用到,但有个疑问就是这两个类型有多大,通过各种尝试最终得到了答案,所以下面这篇文章主要给大家介绍了关于Golang中的int类型和uint类型到底有多大的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-12-12
  • Goland IDEA项目多开设置方式

    Goland IDEA项目多开设置方式

    这篇文章主要介绍了Goland IDEA项目多开设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Go1.18新特性之泛型使用三步曲(小结)

    Go1.18新特性之泛型使用三步曲(小结)

    本文主要介绍了Go1.18新特性之泛型,是Go1.18的新特性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • GO 使用Webhook 实现github 自动化部署的方法

    GO 使用Webhook 实现github 自动化部署的方法

    这篇文章主要介绍了GO 使用Webhook 实现github 自动化部署的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • golang操作rocketmq的示例代码

    golang操作rocketmq的示例代码

    这篇文章主要介绍了golang操作rocketmq的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 详解Go语言中Validator库的使用方法和用途

    详解Go语言中Validator库的使用方法和用途

    github.com/go-playground/validator 是一个 Go 语言的库,用于对结构体字段进行验证,它提供了一种简单而灵活的方式来定义验证规则,在这篇文章中,我们将从一个简单的问题出发,带你了解 Validator 库的用途,也会介绍Validator 的基本使用
    2023-09-09
  • 解析GOROOT、GOPATH、Go-Modules-三者的关系

    解析GOROOT、GOPATH、Go-Modules-三者的关系

    这篇文章主要介绍了解析GOROOT、GOPATH、Go-Modules-三者的关系,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论