私有化仓库的 GO 模块使用实践

本文详细介绍了如何在Go中使用私有化模块,涉及goget工具的使用、私有gitlab源代码获取、认证问题以及GOPROXY的配置,包括动态匹配、git认证方法和模块校验。又拍云团队的实践案例提供了具体步骤和解决方案。

本文以又拍云团队私有化模块处理的实践案例为基础,介绍如何使用私有化模块,以及 go get 工具背后的细节,其中包括如何让 go 正确的源获私有化 gitlab 上源代码以及认证等问题。文章根据又拍云资深开发工程师刘云鹏在 Open Talk 公开课直播分享进行整理,回放视频请下拉文末点击“阅读原文”。

关于 Open Talk:由又拍云发起的综合性技术沙龙,秉承又拍云“让创业更简单”的初衷,以全干货的形式为技术开发者提供包括技术、运维、产品、创业等多维度的知识分享,帮助企业成员提升专业技能,推动企业更好更快地发展。

研发背景

GO 在 1.11 版本开始引入 Module 的特性;1.13 版本引入 Module 校验和检查,加强了 Module 的安全性;现在的 1.16 版本已经默认使用 Module 模式。日前 GO 团队在博客上表明,将在 1.17 版本时删除对 GOPAHT 的支持,如果现在还没有使用 GO MODULE,赶紧抓紧时间试试 GOMDULE 吧。

GOMODULE 和 GOPATH 的主要区别在于私有化模块的使用。公有化模块使用是相同的,都是通过 go get 直接获取模块。对于私有化模块 GOPAHT 可以直接将模块代码丢在 GOPAHT 目录下,而 GO Module 不行,它有自己的代码管理方式,下面我们简单介绍下。

GO 如何获取 Module

GO 获取模块通常是使用 go get 工具获取模块,当前 go get 支持两种方式:

第一种是通过传统的 VCS 去代码托管平台上拉取代码,以 git 为主,还支持 svn、hg、等其他平台。

第二种是通过 1.12 版本开始支持的 GOPROXY 协议,go 在 GOPROXY 服务器上获取代码归档文件。

从 1.13 起 GO 还使用校验和检查—— GO SUM ,所有模块下载后都会检查其校验和。它会将下载模块的哈希值与 Google 线上数据库中的哈希值进行比对,防止模块被篡改,只有验证通过后的模块才能正常安装使用。

VCS 获取模块的方式

GO 支持很多的版本管理工具。首先需要判断使用什么版本管理工具去获取模块。判断方式大致分成三类,不依赖其他的两种静态匹配方式和一种动态匹配方式。

静态匹配方式

**前缀匹配:**比如 github 、谷歌的 bitbuket 和 apache、openstack 等代码托管平台,会内制在 go get 的工具链中,会去判断模块的前缀当前缀匹配上则使用对应的版本管理工具。图中左方的一例子,github.com/eamaple/pkg 模块会匹配前缀,并与 github 相匹配,同时能知道 github 使用 git 工具。

**正则匹配:**正则的方式是给模块加上后缀,后缀名可以是前文介绍的五种版本管理工具( git,svn ,hg ,bzr,fossil )之一的后缀。后缀的匹配是通过正则表达式实现的。上图中两个例子都是以 .git 作为后缀,通过正则表达式的匹配会得到里面的子分组,即 VCS 子分组会匹配到模块是使用 git 进行管理的。

动态匹配方式

当前缀和正则表达式都匹配不上,则会采用动态判断的方式。go get 会发送一个 HTTP 请求,URL为模块带上协议头和参数( go-get=1 )。go get 期待服务器返回模块相应信息来帮助go get 进一步的操作。GO 默认会发送 HTTPS 请求,如果服务器想用 HTTP 协议,可以通过环境变量 GOINSECURE 来处理,当 GOINSECURE 为 1 时,GO 就会使用 HTTP 协议。

Go get 预期的返回体是一个 HTML 文档,其中对 GO 有意义的是要带 name=“go-import” 属性的 meta 标签。该 met

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值