美文网首页
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