用于存放私有的common包,一般情况下,引用这些包有三种方式:
- 使用传统的go path
- 使用go mod模式,然后加replace
- go mod+私有仓库的方式(推荐)
本文主要介绍中第三种方式:
- 基于gitee私库
- 基于gitlab私库
go中的模块化开发
在java中的公共jar包在golang中变成公共模块,而私有仓库在golang中是自己搭建的gitlab或gitthub gitee等,在golang中引入模块的方式是
- 工程在
go mod init ...
来初始化 - golang 中引入模块的方式是 import
import (
"gitee.com/liuyijiang/gopjutils"
)
# gitee.com是仓库对应的域名,如果是私有仓库则对应的自己私库的域名
基于gitee私库
一、 创建项目
1、先gitee上创建一个项目
(过程略,网上教程很多)
2、然后clone项目并初始化
git clone https://gitee.com/xxx/go-nianxi.git
3、用go mod在在本地初始化
cd go-nianxi
go mod init gitee.com/xxx/go-nianxi #创建成功,控制台提示如下输出
---
#go: creating new go.mod: module gitee.com/xxx/go-nianxi
mod的名称一定要是gitee上项目的地址路径!注意不要有.git
模块名称一定在要具体的仓库上的路由一至,否则会报错
用gitlab创建时也是一样的规则,后方不再赘述
4、编写测试
package go-nianxi
import "fmt"
func hello() {
fmt.Println("hello world!")
}
5、push至gitee
git commit push ...
二、在机器上创建公钥
如果使用gitee作为私库这一步不是必须的 可直接到step3
1、先创建ssh公钥
在本地使用ssh-keygen命令生成公私钥:
ssh-keygen -t ed25519 -C "xxx@163.com" #一路回车
ed25519为加密方式,rsa加密方式有时会出现密钥无效的情况
rsa加密方式:ssh-keygen -t rsa -C "xxx@163.com"
2、查看把上一步得到的公钥内容复制,并复制到gitee
查看秘钥
cat ~/.ssh/id_ed25519.pub 查看证书内容
---
ssh-ed25519 AAAAC3Nz....9KuPHik/juOi07Tl/E6RpB6z2UvWy xxx@163.com
# window下在 C:\Users\<用户名>\.ssh 下
复制到gitee上 : 入口->我的-> 个人设置
3、 测试连通
ssh -T gitee@gitee.com #出现以下数据,先输入Yes,说明连通
----------------
The authenticity of host 'gitee.com (212.64.63.215)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitee.com,212.64.63.215' (ECDSA) to the list of known hosts.
Hi nianxiaoling! You've successfully authenticated, but GITEE.COM does not provide shell access.
4、对从https://gitee.com拉取代码的请求的替换为ssh
git config --global url."git@gitee.com:".insteadOf "https://gitee.com/"
如果项目是使用Jenkins等自动化发布平台的话,需要把id_ed25519.pub复制到Jenkins的服务器上,或者在Jenkins服务器上在生成一个公钥添加到gitee。
三、配置go env私库地址
go env -w GOPRIVATE=gitee.com
#go env -w GOPRIVATE=gitee.com,xxxx.com #配置多个私库1
注意:必须要配置私库 域名地址 否则 go get无法拉取到模块代码
添加完成后可以看到
go env
-
四、测试使用
创建一个项目
mkdir test
cd test
go mod init test
go get gitee.com/xxx/go-nianxi-test
---
import (
"fmt"
gonianxi "gitee.com/nianxiaoling/go-nianxi"
)
func main() {
fmt.Println(gonianxi.Hello())
}
----
go run main.go
go run main.go
打印输出 hello world!
测试成功
基于gitlab私库
过程和gitee类似,有几个需要注意:
1、更多的场景是公司自己部署gitlab私库 来保存代码,并且自己搭建的gitlab不支持https
2、nginx反向代码要开启ssh
image.png
由于gitlab服务不支持https 并且我们更多的时候会频繁的go get 模块不想配置账号密码 所以这一步需要使用ssh方式拉取代码
附- 与私库相关的go env的全局变量。
// 配置开启gomod
go env -w GO111MODULE="on"
// 配置GoMod私有仓库
go env -w GOPRIVATE="..."
// 配置不加密访问
go env -w GOINSECURE=".."
// 配置不使用代理
go env -w GONOPROXY=".."
// 配置不验证包
go env -w GONOSUMDB=".."
网友评论