美文网首页
Golang-模块化开发与私有仓库

Golang-模块化开发与私有仓库

作者: 卡门001 | 来源:发表于2023-03-12 22:07 被阅读0次

用于存放私有的common包,一般情况下,引用这些包有三种方式:

  • 使用传统的go path
  • 使用go mod模式,然后加replace
  • go mod+私有仓库的方式(推荐)

本文主要介绍中第三种方式:

  • 基于gitee私库
  • 基于gitlab私库

go中的模块化开发

在java中的公共jar包在golang中变成公共模块,而私有仓库在golang中是自己搭建的gitlab或gitthub gitee等,在golang中引入模块的方式是

  1. 工程在go mod init ...来初始化
  2. 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=".."

相关文章

网友评论

      本文标题:Golang-模块化开发与私有仓库

      本文链接:https://www.haomeiwen.com/subject/pepqrdtx.html