golang独立模块开发流程

大纲

  • 基本概念与背景
  • 模块开发流程总结
  • 基于gitee私库
  • 基于gitlab私库

基本概念与背景

java项目开发过程中,有不同的项目组,有的项目组做业务开发,有的项目组做公共jar包的开发等。业务项目需要依赖公共jar包的时候,我们都使用nexus等maven私库+maven构建项目

golang也类似,这里的公共jar包就是golang中的公共模块,maven 变成了go get nexus变成了自己搭建的gitlab 或者 github gitee等

模块开发流程总结

golang 中引入模块的方式是 import

import ("gitee.com/liuyijiang/gopjutils"
)

如果是私库则会对应自己的私库域名例如:

  • gitee.com
  • git.domain.com[这是一个Gitlab的域名]

所以在构建自己的模块前,我们需要先搞定私库

注意本次测试 golang版本为1.19
注意本次测试 golang版本为1.19

基于gitee私库

step1 创建项目

在创建golang 模块项目前,首先构思好模块的名称,因为这对应gitee(github gitlab)上的路径。模块名称需要和仓库路径一致否则go get的时候会出现如下错误

module declares its path as: ××× but was required as: ×××

先gitee上创建一个项目

然后clone项目并初始化

git clone https://gitee.com/liuyijiang/commoncode.git
go mod init gitee.com/liuyijiang/commoncode

注意: mod的名称一定要是gitee上项目的地址路径!注意不要有.git

简单的编写一些模块代码

git commit push 后模块就可以在其他项目中使用了

step2 在机器上创建ssh公钥

注意: 如果使用gitee作为私库这一步不是必须的 可直接到step3

注意: 如果使用gitee作为私库这一步不是必须的 可直接到step3

注意: 如果使用gitee作为私库这一步不是必须的 可直接到step3

go get 是使用https获取仓库的go模块代码,(但是Go更新依赖时,会强制校验CA证书来确保依赖库的安全性) 我们自己的仓库一般是内网环境所以并未配置https证书 并且如果直接GOINSECURE忽略校验CA证书又需要账号密码不方便, 所以需要使用ssh的方式拉取go模块代码

这里以gitee为例子(使用gitee作为私库是不需要配置ssh 因为gitee是支持https证书验证) 后面会有gitlab的例子

step2.1 先创建ssh公钥

使用ssh-keygen命令生成公私钥

ssh-keygen -t ed25519 -C "liuyijiang3430@qq.com"

step2.2 把公钥添加到gitee

把上一步得到的公钥内容复制到gitee

cat ~/.ssh/id_ed25519.pub

测试连通

对从https://gitee.com拉取代码的请求的替换为ssh

如果项目是使用Jenkins等自动化发布平台的话,需要把id_ed25519.pub复制到Jenkins的服务器上,或者在Jenkins服务器上在生成一个公钥添加到gitee

step3 go env 配置私库

注意:必须要配置私库 域名地址 否则 go get无法拉取到模块代码

例如使用 go get gitee.com/liuyijiang/commoncode 再未配置私库的情况下无法找到对应的模块

使用如下命令添加私库

go env -w GOPRIVATE=gitee.com
go env -w GOPRIVATE=gitee.com,xxxx.com #配置多个私库

添加完成后可以看到

再次 go get gitee.com/liuyijiang/commoncode 可以成功添加模块

gopath 下也可以看到拉取的模块代码了

step4 测试使用公共模块

现在可以使用import导入公共包,并开发了

测试成功

基于gitlab私库

更多的场景是公司自己部署gitlab私库 来保存代码,并且自己搭建的gitlab不支持https

step1 创建项目

先gitlab上创建一个项目 注意自己搭建的gitlab不是https的

然后clone项目并初始化

git clone http://git.kfc123.com/liuyijiang/gocode.git
go mod init git.kfc123.com/liuyijiang/gocode

注意: mod的名称一定要是git.kfc123.com上项目的地址路径!注意不要有.git

go mod init git.kfc123.com/liuyijiang/gocode

简单的编写一些模块代码

git commit push 后模块就可以在其他项目中使用了

step2 在机器上创建ssh公钥

注意: 由于gitlab服务不支持https 并且我们更多的时候会频繁的go get 模块不想配置账号密码 所以这一步需要使用ssh方式拉取代码

go get 是使用https获取仓库的go模块代码(底层还是git命令),(但是Go更新依赖时,会强制校验CA证书来确保依赖库的安全性) 我们自己的仓库一般是内网环境所以并未配置https证书 并且如果直接GOINSECURE忽略校验CA证书又需要账号密码不方便, 所以需要使用ssh的方式拉取go模块代码

注意 一般自己搭建的gitlab 会有一个nginx做反向代理,这里需要配置nginx的tcp 反向代码支持ssh

这里nginx 服务器上9922对应gitlab的 ssh端口 nginx默认是没有安装tcp 反向代理的需要使用 --with-stream模块开启

step2.1 先创建ssh公钥

使用ssh-keygen命令生成公私钥 注意使用自己的邮箱

$ ssh-keygen -t rsa -C  "liuyijiang3430@qq.com"

step2.2 把公钥添加到gitlab

把上一步得到的公钥内容复制到gitlab

cat ~/.ssh/id_rsa.pub

step2.3 配置本地ssh使用端口与公钥

需要配置一下ssh使用的端口 否则会有以下错误

在 ~/.ssh 文件夹下创建config文件 (注意config文件没有后缀名) 添加如下内容

测试连通 ssh -T git@git.kfc123.com

如果项目是使用Jenkins等自动化发布平台的话,需要把id_rsa.pub复制到Jenkins的服务器上,或者在Jenkins服务器上在生成一个公钥添加到gitlab**

step2.4 配置http 替换为 ssh

对从http://git.kfc123.com拉取代码的请求的替换为ssh

git config --global url."git@git.kfc123.com:".insteadOf "http://git.kfc123.com/"
所有以 http://git.kfc123.com/ 开头的url 都替换为 git@git.kfc123.com:例如
http://git.kfc123.com/liuyijiang/gocode
会被替换为
git@git.kfc123.com:liuyijiang/gocode

step2.5 关闭私库校验CA证书

如果私有库不支持https协议,会报如下的错误。这是因为Go更新依赖时,会强制校验CA证书来确保依赖库的安全性。

如果私有库不支持https协议,还需要配置go 环境变量中的GOINSECURE参数使其使用http方式访问

go env -w GOINSECURE=git.kfc123.com
go env -w GOINSECURE=git.kfc123.com,xxx.com #配置多个http访问域名

以上配置完成后go get整体流程是

输入go get git.kfc123.com/liuyijiang/gocode1 先发出https请求
2 https失败后切换为http
3 由于配置了替换 http请求变成了ssh

使用 go get -v -x git.kfc123.com/liuyijiang/gocode 可以看到详细的执行流程

step3 go env 配置私库

注意:必须要配置私库 域名地址 否则 go get无法拉取到模块代码

go env -w GOPRIVATE=gitee.com,git.kfc123.com #配置多个私库

使用 go get git.kfc123.com/liuyijiang/gocode 获取go模块

成功拉取代码

step4 测试使用公共模块

现在可以使用import导入公共包,并开发了

测试成功

最详细的golang + 私库(gitlab gitee) 模块开发 这一篇文章解决所有问题相关推荐

  1. python 的库如何开发_一篇文章入门Python生态系统

    译者按:原文写于2011年末,虽然文中关于Python 3的一些说法可以说已经不成立了,但是作为一篇面向从其他语言转型到Python的程序员来说,本文对Python的生态系统还是做了较为全面的介绍.文 ...

  2. python三维数据转换成二维_5大Python可视化库到底选哪个好?一篇文章搞定从选库到教学...

    最近和鲸社区的大佬们,竟不约而同地写起了可视化库的教程,开始了掰头 ※完整教程列表在文末附录 虽然对于我们这种吃瓜群众来说是件好事,但 大概大佬的快乐往往就是那么的朴实无华且枯燥吧.害,管他呢,赶紧拿 ...

  3. python拿什么做可视化界面好_5大Python可视化库到底选哪个好?一篇文章搞定从选库到教学...

    最近和鲸社区的大佬们,不约而同地写起了可视化库的教程 虽然对于我们这种吃瓜群众来说是件好事,但 大概大佬的快乐往往就是那么的朴实无华且枯燥吧.害,管他呢,赶紧拿出来给大家瞅瞅. 今天提及的5个Pyth ...

  4. Numpy用法详细总结:学习numpy如何使用,看这一篇文章就足够了

    Numpy用法详细总结 一.创建ndarray及查看数据类型 1. 使用np.array()由python list创建 图片与array数组的关系 2. 使用np的常用函数创建 二.ndarray的 ...

  5. Golang 标准库log的实现

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://gotaly.blog.51cto.com/8861157/1406905 前一篇 ...

  6. 解决win10上部署私库被其他机器拉取提示:no rout to host 错误问题

    在win10机器使用Docker Desktop 搭建k8s,在k8s中搭建私库Docker Registry 后再本机可以正常拉取镜像和推送镜像到私库,在局域网中的其他主机上无法拉取镜像.第一步怀疑 ...

  7. golang常用库之-mgo.v2包、MongoDB官方go-mongo-driver包、七牛Qmgo包 | go操作mongodb、mongodb bson

    文章目录 golang常用库之-mgo.v2包.MongoDB官方go-mongo-driver包.七牛Qmgo包 | go操作mongodb.mongodb bson 一.[不推荐]mgo.v2包 ...

  8. 搭建Nexus私库使用

    maven提供了开发人员的方式来管理: 1)Builds 2)Documentation 3)Reporting 4)Dependencies 5)SCMs 6)Releases 7)Distribu ...

  9. Nexus 配置yum私库

    文章目录 前序 base 私库地址的配置规则 epel-release online local 让nexus私库缓存你的rpm包 repomd.xml signature could not be ...

最新文章

  1. 苹果公司华人研究员抛弃注意力机制,史上最快的Transformer!新模型达成最低时间复杂度...
  2. Elasticsearch-7.0和Logstash-7.0和Kibaa-7.0的下载以及安装(百度网盘)
  3. 40、使用javassit操作运行时字节码文件
  4. 第一次连接mysql失败_MySQL 远程连接失败
  5. Node.js Domain 模块
  6. LeetCode刷题(Python)——在排序数组中查找元素的第一个和最后一个位置
  7. iPhone 12售价再曝光,可能涨价50美元
  8. CSS3和jQuery实现的自定义美化Checkbox和Radiobox
  9. 【杭电ACM】1.2.6 decimal system
  10. Atlassian发布Bamboo 6.0和Bitbucket Server 5.0
  11. Vue毫秒计时器(开始计时)
  12. 基于51单片机的温度检测调节系统设计
  13. uni-app 将app运行在夜神安卓模拟器
  14. CC2640R2FRSMR低功耗M3内核蓝牙MCU
  15. 【单片机仿真项目】LED 闪烁灯(proteus原理图+keil代码)
  16. java和大数据开发该选择哪个好就业?
  17. 图片不能置于底层怎么办_ps怎么把图片置于底层
  18. C#实现微信自动回复机器人和微信支付
  19. 素数处理-埃拉托色尼筛选法(埃式筛)
  20. c语言中如果产量的隐藏类型是,如果随着产量的增加,生产函数首先表现出边际产量增加,然后表现出边际产量递减,那么相应的边际成本曲线将 答案:是U形的...

热门文章

  1. 第十二届蓝桥杯初赛试题B直线
  2. 第十二届蓝桥杯D题 货物摆放
  3. 天工开物 #5 我的 Linux 开发机
  4. 哪个PHP文本编辑器最好?
  5. python中copy函数怎么用_python怎样copy对象
  6. WIN10系统如何完全获取用户管理员权限
  7. 月薪2千到年薪百万,厂妹到高盛程序员,她书写了一个女孩的史诗
  8. 阿里安筱鹏:一文讲透数字化转型的本质!
  9. PAP认证与CHAP认证的区别
  10. 知新温故,从知识图谱到图数据库