go mod私有仓库配置小结

 更新时间:2025年03月28日 09:21:45   作者:Daniel YK  
Go语言私有仓库通常指的是那些不在公共仓库如GitHub上的仓库,本文主要介绍了go mod私有仓库配置,具有一定的参考价值,感兴趣的可以了解一下

Golang版本控制

go version v1.22.0

当我们新建一个go项目时,在项目根目录下执行go mod init可以初始化go.mod文件用于管理包依赖。后续执行go mod tidy更新并下载所有的依赖包。
如果我们没有进行配置,则只能访问公共开源仓库。如果想要下载私有仓库依赖包则需要进行一些配置。

go mod使用私有仓库(gitlab)依赖设置

假如想配置托管站点gitlab.example.cn,按照如下步骤操作:

设置GOPRIVATE环境变量,防止走代理:

  • go env -w GOPRIVATE=*.gitlab.example.cn/*
  • go env -w GONOPROXY=*.gitlab.example.cn/*

配置仓库访问权限,有两种方式:

  • 方式一(推荐): 配置git将请求从ssh转换为https:git config --global url."ssh://git@gitlab.example.cn/".insteadof "https://gitlab.example.cn/"
  • 方式二:添加仓库访问Token: git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN"

由于访问不到验证服务器,如下方式二选一:

  • 方式一:go env -w GONOSUMDB=gitlab.example.com/*
  • 方式二:关闭验证服务 go env -w GOSUMDB=off

如果私有库不支持https协议,设置跳过CA证书校验:go env -w GOINSECURE='gitlab.example.com/*'

配置完成后可以git config -l查看git配置,也可以通过.gitconfig直接编辑git配置:

[http]
	extraheader = PRIVATE-TOKEN:UsQsxy5q_Nqy-pXHtu-V
	
[url "ssh://git@gitlab.example.cn/"]
	insteadof = https://gitlab.example.cn/

通过go env查看环境变量配置,也可以直接通过profile配置环境变量:

export GOPRIVATE=*.gitlab.example.com/*
export GONOPROXY=*.gitlab.example.com/*
export GOINSECURE=*.gitlab.example.com/*
export GONOSUMDB=*.gitlab.example.com/*

配置代码托管站点

Go mod寻找代码仓库原理

https://pkg.go.dev/cmd/go#hdr-Remote_import_paths

如果import路径不是已知的代码托管站点并且也缺少版本控制限定符,则go工具会尝试通过https/http获取导入并在文档的HTML <head>中查找<meta>标记。

元标记的形式如下:

<meta name="go-import" content="import-prefix vcs repo-root">

使用mod时,会识别go-import元标记的附加变体,并且优先级高于那些默认的版本控制系统。该变体使用mod作为内容值中的vcs,如下所示:

<meta name="go-import" content="example.org mod https://code.org/moduleproxy">

此标签表示从 URLhttps://code.org/moduleproxy上的模块代理中获取路径以 example.org开头的模块。有关代理协议的详细信息, 请参阅https://golang.org/ref/mod#goproxy-protocol 。

查找模块路径的存储库:https://go.dev/ref/mod#vcs-find

使用代理实现代码托管站点访问

一般主流的代码托管站站点如github,gitlab,Gitee等,都默认支持返回站点的golang mod元数据。
如果无法对外暴露站点的域名,且甚至无法拥有更改站点访问地址的权限。比如,部署站点的时候是以ip+port的方式访问。这时需要配置一个虚拟的域名作为go mod的引用包路径,这时可以使用Nginx配置站点的内网访问代理,返回带有元标记的静态页面。例如要访问站点gitlab.example.com

if ($args ~* "^go-get=1") {
                        set $condition goget;
        }
        if ($uri ~ "(/[^/]+/[^/]+)(/.*)?") {
                        set $condition "${condition}path";
        }
        if ($condition = gogetpath) {
                        return 200 "<!DOCTYPE html><html><head><meta content='gitlab.example.com$1 git https://gitlab.example.com$1.git' name='go-import'></head></html>";
        }

参考:https://stackoverflow.com/questions/26347516/using-go-get-on-a-personal-git-repo

到此这篇关于go mod私有仓库配置小结的文章就介绍到这了,更多相关go mod私有仓库配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang的Crypto/SHA256库实战指南

    Golang的Crypto/SHA256库实战指南

    无论是在保护数据安全、验证数据完整性,还是在构建复杂的安全系统中,crypto/sha256都是Golang程序员不可或缺的工具,本文主要介绍了Golang的Crypto/SHA256库实战指南,感兴趣的可以了解一下
    2024-02-02
  • Fedora14 Linux系统安装Golang开发环境笔记

    Fedora14 Linux系统安装Golang开发环境笔记

    这篇文章主要介绍了Fedora14 Linux系统安装Golang开发环境笔记,本文讲解了2种安装方法,需要的朋友可以参考下
    2014-10-10
  • 一篇文章说清楚 go get 使用私有库的方法

    一篇文章说清楚 go get 使用私有库的方法

    这篇文章主要介绍了go get 如何使用私有库,本文会明确指出Git 、golang的配置项,附送TortoiseGit + Git混合配置,需要的朋友可以参考下
    2022-09-09
  • Golang 变量申明的三种方式

    Golang 变量申明的三种方式

    这篇文章主要介绍了Golang 变量申明的三种方式,帮助大家更好的理解和学习golang,感兴趣的朋友可以了解下
    2020-08-08
  • Go gRPC服务proto数据验证进阶教程

    Go gRPC服务proto数据验证进阶教程

    这篇文章主要为大家介绍了Go gRPC服务proto数据验证进阶教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 8种超简单的Golang生成随机字符串方式分享

    8种超简单的Golang生成随机字符串方式分享

    这篇文章主要为大家详细介绍了8种超简单的Golang生成随机字符串方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Go 语言下基于Redis分布式锁的实现方式

    Go 语言下基于Redis分布式锁的实现方式

    本篇文章将详细介绍如何正确地实现Redis分布式锁,下面通过一个项目基于 Redis 的分布式锁能够提供哪些分布锁特性,本文给大家介绍的非常详细,需要的朋友参考下吧
    2021-06-06
  • go time.Sleep睡眠指定时间实例详解(小时级到纳秒级)

    go time.Sleep睡眠指定时间实例详解(小时级到纳秒级)

    golang的休眠可以使用time包中的sleep,下面这篇文章主要给大家介绍了关于go time.Sleep睡眠指定时间(小时级到纳秒级)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 对Golang import 导入包语法详解

    对Golang import 导入包语法详解

    今天小编就为大家分享一篇对Golang import 导入包语法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Go语言使用protojson库实现Protocol Buffers与JSON转换

    Go语言使用protojson库实现Protocol Buffers与JSON转换

    本文主要介绍Google开源的工具库Protojson库如何Protocol Buffers与JSON进行转换,以及和标准库encoding/json的性能对比,需要的朋友可以参考下
    2023-09-09

最新评论