golang拉取私有库代码问题

楔子

在开发程序中我们会引入自己的私有库代码,这个私有库代码由gitlab gitea等服务托管。我们想通过go get 以及潜在拉取代码命令去拉取代码,从而解决不能下载访问问题,有此记录在此,以下只针对go module版本做论述。 

正文

前提条件:

1.配置好GOPATH环境

2.支持go module版本也就是golang >= 1.11以上

方案一:

我们可以采用go vendor(需要golang>=1.6版本)包的方式,把我们依赖的私有库代码放入到vendor中。

优点:

1.在网络不好的状况下、或者无网编译、拉取代码不方便的情况下适用(比如国企业务场景)。

2.代码能正常引用,不需要更改go.mod文件

缺点:

1.如果微服务多实例,每次更新部署都需要copy一份vendor包。

2.如果依赖的代码频繁修改发布,每个服务实例也需要copy一份覆盖。

方案二:

采用go module提供的replace替换修改go.mod文件引用包的方法来解决。具体方法也是把依赖的库下载到本地目录中,任意目录即可,也可以是gopath目录中,和vendor思想雷同。

优点:

1.同上文方案一vendor

缺点:

1.同上文方案一vendor

2.会存在找不到替换引用的代码包。通常我们开发代码都是在本地,我们的私有库都是公司内网可以访问的,可能因为一些原因你本地访问不了内网或者无法拉取私有库代码,为了能让代码在本地开发环境运行起来我们可提前下载好依赖包,然后用replace替换引用到这个下载的代码包,这是replace替换功能的真正用途。重点来了,我们每次开发完成之后提交代码需要修改go.mod replace 把replace删除掉在提交或者修改replace替换地址,不然放到线上服务器运行会出错,会提示缺少代码依赖包文件找不到相关错误,当然这个错误很好解决,你可以约定好目录在线上服务器以同样的方式和目录下放入依赖代码,这样replace就能找到依赖代码了。至于为什么要删掉或修改replace,因为每个人的本地环境不同存放依赖库代码位置也不同,因此replace替换地址也不同。以上这也是一种方案,但是你有没有发现这又退化回vendor复制粘贴问题了。

方案三:

终极方案,配置go的GOPRIVATE

步骤一

配置golang环境变量。使用go命令 go env 查看环境变量是否设置成自己的私有代码库地址


未设置

为空则未设置,或者已经设置想修改替换则使用以下命令

go env -w GOPRIVATE=gitlab.xxx.com    //gitlab.xxx.com为你引用的私有库

ps:早期旧版本golang不支持 -w参数,大概golang1.14版本之后有此功能需要注意!低版本可以采用环境变量export方式设置,或者修改profile文件

其中我们可以使用模糊匹配方式比如*.开头。然后我们执行命令查看是否设置成功,使用go env命令如下

ok此时代表设置成功。

步骤二

配置git配置文件。linux切换到 ~/.gitconfig目录文件下,如果没有则在该目录创建此文件。然后打开此文件准备添加内容。在我们拉取clone代码访问有以下两种方式一种是ssh访问,以及https这种,以下针对这两种配置说明如下

ssh:

[url "ssh://git@github.com/"]

        insteadOf = https://github.com/

由于我的是GitHub代码托管平台,所以配置的是github.com域名,如果是gitlab则配置自己搭建的gitlab域名地址,其他gitea诸如此类

以上操作也可以使用命令行方式代替,比如我想用https账号和密码方式代替去访问可以使用如下命令

git config --global url."https://$GIT_USER:$GIT_TOKEN@$GOPRIVATE".insteadOf "https://$GOPRIVATE"

最终在~/.gitconfig文件中生成得内容格式为

[url "https://root:mypassword.@gitlab.xxx.cn"]

        insteadOf = https://gitlab.xxx.cn

https:

[http]

        extraheader = PRIVATE-TOKEN: {此处填写申请的token}

如果没有配置访问证书以及秘钥则先去代码托管平台申请然后在执行步操作。

到此基本已经结束,此时我们在拉取代码不出意外基本成功,如何验证是否成功则可以使用以下命令:

go mod tidy

具体操作就是拉取依赖代码,对依赖包文件进行增加或者删减,同时检验go.mod文件的正确性,并对其修改引用。

然后我们可以看见如下信息

示例图片

优点:

1.每次升级部署无需copy代码,只需要在go.mod中指定代码依赖版本即可

2.无需每次修改go.mod文件

3.一劳永逸

缺点

1.配置流程较为麻烦,只配置一次但还可以接受

2.如果程序代码部署到多台物理机,每台物理机需要安装配置git以及配置环境变量等,如今有docker等镜像制作方式这点也可以接受。

提示: 有的时候可能设置好了私钥等配置但是还是不能拉取下来代码,可以尝试清理构建得缓存内容,使用golang命令 go clean -modcache 方式具体参考go clean命令

总结

以上列举出了针对私有库拉取代码的实现方案,并对每种方案的优缺点说明进行了总结,其中本文并没有对曾经的代码管理方式dep来进行说明,此方案golang官方已经废弃,因此在这里不在赘述。

参考文章

https://golang.org/doc/faq#git_https

https://zhuanlan.zhihu.com/p/646336183?utm_id=0

https://blog.csdn.net/xcbeyond/article/details/132233404

一个用golang得渣专生

完~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容