Go语言官方的依赖包管理工具Go Modules已经发布很久,从1.14版本开始更是默认自动开启了Go Modules的支持,相信很多人公司里的项目都从go vendor、dep 之类的依赖管理切换到Go Modules上了吧。

Go Modules 号称是语言原生的、零配置开箱即用的包依赖管理工具,当然零配置只有我们项目依赖的都是相互之间没有冲突的外部公共包时这个条件才能成立。

我在之前的文章《项目改用GoModules管理依赖的方法和经验总结》里给大家总结了项目切换到Go Modules进行包依赖管理的一些步骤,也介绍了怎么用 replace 指令解决 etcd 和 grpc 的版本不兼容这个比较令人费解的问题的方法。

不过我发现一些朋友在第一次切换到Go Modules的时候在怎么让Go Modules使用私有代码仓库的包作为依赖模块时都会遇到些问题。这篇文章帮大家总结一下让Go Modules使用私有代码仓库做模块时,两个需要配置的地方。

配置Git使用SSH拉取私有依赖

如果不做任何设置,当我们的项目通过Go Modules 引用私有仓库的代码包时会发生以下错误:

go: downloading code.lazycorp.com/privaterepo v0.0.0-20200408100711-ed766a2975ce
go get code.lazycorp.com/privaterepo: code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ce: verifying module: code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ce: reading https://sum.golang.org/lookup/code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ce: 410 Goneserver response:not found: code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ab: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /tmp/gopath/pkg/mod/cache/vcs/13e63a509893edc19353a80fa2c6e28db213d146f72fe43ba65c1ec86624027b: exit status 128:fatal: could not read Username for 'https://code.lazycorp.com': terminal prompts disabled

导致这个问题的原因是Go Moduels 默认通过 HTTPs 的方式下载 git 仓库上的代码,我们希望(而不是使用 HTTPS)通过 SSH 下载这些私有依赖,这样我们就可以使用本地设置的 SSH 密钥来访问git 仓库。

为解决这个问题我们可以做的是配置 git 将所有 HTTPs URL 重写为等效的 git SSH URL:

git config --add --global url."git@code.lazycorp.com:".insteadOf https://code.lazycorp.com

code.lazycorp.com是我随便起的名字,这里应该替换成你们公司的git仓库的域名,如果是使用GitHub上的私有仓库就配置:

git config --add --global url."git@github.com:".insteadOf https://github.com

配置GOPRIVATE环境变量

这个环境变量就是为私有依赖准备的,一般是设置成代码仓库站点的域名。还是假如公司内部代码仓库站点的域名是code.lazycorp.com,那么我们就把这个环境变量设置成

export GOPRIVATE=code.lazycorp.com

这样设置的话,所有路径前缀为code.lazycorp.com的模块都不会再经过GOPROXY指定的镜像站点拉取模块对应的软件包,转而去code.lazycorp.com拉取软件包。

这里提一个小技巧,假如你自己开发的时候不想污染电脑系统里的全局环境变量,可以选择在GoLand里开启Go Modules支持和设置环境变量,这样在GoLand内编译运行程序时也能正常使用Go Modules。

Goland配置

总结

经过上面两步配置就能顺利让Go Modules使用上私有依赖,如果还有Go Modules使用上的问题,欢迎各位留言讨论,相信读者里一定隐藏着不少大佬能一起解决这些问题。

相关阅读

项目改用GoModules管理依赖的方法和经验总结

怎么让Go Modules使用私有依赖模块相关推荐

  1. modules not found(模块未找到)的解决方案

    起因:公司一部门经理换新电脑,然后excel 2007无法打开带有很多宏的excel,提示modules not found. 由于这个问题一直碰到很多次,都是没有真正的解决方案.最后发现公司装的系统 ...

  2. 云小课|帮您高效快速上传组件至私有依赖库

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:软件开发平台中的发 ...

  3. maven 打包命令,只编译选择模块及其依赖模块

    当项目结构如下 --parent --admin --common --dal --service --web 如果你只想执行编译打包admin及其依赖模块,那么命令如下 mvn clean -U i ...

  4. 公共依赖模块common的处理

    公共依赖模块指的是多个模块之间共享的工具类.配置类.异常类.全局异常处理.全局返回值对象.公共依赖等.使用common模块应该尽可能的避免高耦合的情.下面我们来总结一下common模块的工作原理. 1 ...

  5. python依赖模块离线安装方法

    一.方式一 1.依赖模块下载 下载需要的模块 :我这里下载openpyxl 模块(模块下载可以到python 官网上下载:PyPI · The Python Package Index)搜索openp ...

  6. jQuery源码解析(架构与依赖模块)

    jQuery设计理念 引用百科的介绍: jQuery是继prototype之后又一个优秀的Javascript框架.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1. ...

  7. jQuery源码解析(架构与依赖模块)第一章 理解架构

    1-1 jQuery设计理念 引用百科的介绍: jQuery是继prototype之后又一个优秀的Javascript框架.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, F ...

  8. Gradle排除依赖模块的某个类

    好久没写文章了,开工第一天来一发开门红.既然没什么可写的,就简单聊聊Gradlew吧,是Gradle,命令敲多了习惯加个w,开个小玩笑.gradle用来构建项目可谓是十分的灵活,刚开始接触也许觉得有点 ...

  9. Android Gradle排除依赖模块的某个类

    Gradle怎么排除所依赖的模块的某各类 其实我觉得在很多的情况下都会碰到这个问题,比如你的老大写了个BaseModule,里面有很多东西,你就没必要造轮子了,但是其实你这个项目中用不到这么多,那就没 ...

最新文章

  1. pygame.mixer.Sound()语句提示错误:pygame.error: Unable to open file 'test.wav'
  2. 不能将参数转化为lparam_反渗透纯水机是将自来水直接转化为超纯水的装置
  3. 在VS中编译C++静态库以及使用的方法
  4. 基于主动学习算法减少人工标注量,提升文本标注效率的方案探究
  5. mysql rpm 安装多实例_MySQL搭建系列之多实例
  6. 【再探backbone 02】集合-Collection
  7. 科学计算机fix sci,计算器按mode出来的comp、SD、REG、DEg、Rad、Gra、Fix、Sci、Norm、Disp、是什么意思?...
  8. Android 的Android Device Monitor 打不开出现 A error has occured
  9. java字符串截取指定下标位置的字符串
  10. 幽灵java进程引起的: FATAL ERROR in native method
  11. CSS 相邻选择器(七)
  12. zendstudio html插件,ZendStudio安装Aptana插件(html,css,js代码提示功能)_html/css_WEB-ITnose...
  13. JavaScript设计模式——访问者模式
  14. QQ自动登陆器-测试版-不更新
  15. 【业界思考】Sam Altman 山姆奥特曼:Idea Generation 创意产生——优秀的创始人对任何事情都有很多想法
  16. C语言实现物品竞拍管理系统
  17. 【学习笔记】NOIP爆零赛8
  18. excel插入行 uipath_UIPath入門系列三之操作Excel表格
  19. 纽约州立大学水牛城分校计算机科学专业,纽约州立大学水牛城分校
  20. 2021年这些高频面试知识点最后再发一次,跳槽薪资翻倍

热门文章

  1. ORACLE不完全恢复的几种情况
  2. elasticsearch5.0.0中索引和文档接口的变化
  3. redis3.2.8 linux集群安装
  4. vnc报错 font catalog is not properly configured
  5. 与时共舞,力求变革【我眼中的戴尔转型】
  6. python库的学习系列之 13.2. ConfigParser — Configuration file parser
  7. Hibernate讲解(三)-Hibernate的基本映射数据类型
  8. 关于ASPNET_Membership用户被锁的解决
  9. 车道线识别/Opencv/传统方法
  10. Python爬虫基础:验证码的爬取和识别详解