golang独立模块开发流程

大纲

基本概念与背景

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

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

模块开发流程总结

golang引入模块的方式import

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

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

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

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

基于gitee私库

step1 创建项目

创建golang 模块项目前,首先构思好模块的名称,因为这对应giteegithub 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公钥

使用sshkeygen命令生成私钥

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反向代理这里需要配置nginxtcp 反向代码支持ssh

在这里插入图片描述

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

step2.1 先创建ssh公钥

使用sshkeygen命令生成私钥 注意使用自己的邮箱

$ 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/gocode

1 先发出https请求
2 https失败切换为http
3 由于配置了替换 http请求变成了ssh

使用 go get –vx 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导入公共包,并开发

在这里插入图片描述

测试成功

原文地址:https://blog.csdn.net/liuyij3430448/article/details/128618154

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_40766.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注