go modules 使用本地库、公开库和私有库

qingchuwudi · · 178 次点击 · · 开始浏览    

一、简介

公司项目使用 go module 开发的过程中会有一些自己的库要引用,这些库用gitlab管理,需要研究引用gitlab库的方法,下面是研究过程中的一些经验。

介绍几种引用方案:

  • 1、引用本地目录
  • 2、引用合规地址库
  • 3、引用私有不合规库
  • 4、最常规(恶心) 的私有不合规库

上述名词中的 合规 是指:

  • 库的地址是通过域名方式访问
  • 支持HTTPS

    个签证书可以使用命令 go get -insecure

  • 库的地址通过 80 和 443 端口,而不是其它端口

满足上述条件即是 合规库,否则是 不合规库,由于通常不合规库都是私有的,这里直接叫 私有不合规库
其中,违反第3点的最为恶心。

注意:本文撰写于 2020年7月3日,go版本 1.14.4,到撰写日为止内容真实有效,均经过本人验证。

二、引用本地目录

修改文件 go.mod:

module main

go 1.14

// 替换规则
replace (
    github.com/pborman/uuid => /data/go-packages/uuid v1.2.0 // 绝对路径 或 相对路径 都可以
)

// 源地址
require (
    github.com/pborman/uuid v1.2.0
)

默认使用 github.com/pborman/uuid 包会到 Github 上去下载,但这个包还在本地开发中并未push到线上,那么可以通过 replace 配置来重定向当前项目对该包的加载路径:

github.com/pborman/uuid => /data/go-packages/uuid

这里 /data/go-packages/uuid 为本地包的绝对路径,这样写就可以了,当本地 uuid 包代码修改后就可以在当前项目看到实时效果了,注意中间符号是 =>

配置好以后正常拉取代码、编译、调试。

二、引用合规库

引用本地目录类似,修改文件 go.mod:

module main

go 1.14

// 替换规则
replace (
    github.com/pborman/uuid => gitee.com/gober/uuid v1.2.0 // 开源中国地址
)

// 源地址
require (
    github.com/pborman/uuid v1.2.0
)

接下来正常拉取代码、编译、调试。

三、引用私有不合规库

3.1、配置仓库访问权限

有以下两种授权方式:

  • 1、访问令牌(Access Token)

    通过在gitlab生成个人的“访问令牌”,并在拉取git仓库的机器上配置Token来实现访问仓库。

    通常是在这个地址:https://{{gitlab_url}}/profile/personal_access_tokens

    {{gitlab_url}} 是gitlab地址

    personal_access_tokens

  • 2、SSH秘钥(SSH Key) 【推荐】

    通过在gitlab的 个人账户 或者 仓库 下面配置 SSH秘钥,来实现客户端访问仓库。

    注意:这种方式高效、简单,只要保证本地 .ssh 目录下存在相应的秘钥对即可。

3.2、本地配置“访问令牌(Access Token)”参数

使用"ssh密钥"授权则跳过本节

对本项目生效:

git config http.extraheader "PRIVATE-TOKEN:YOUR_PRIVATE_TOKEN"

对所有git项目生效:

git config --global http.extraheader "PRIVATE-TOKEN:YOUR_PRIVATE_TOKEN"

注:根据需求任意选择上面一个配置即可

3.3、配置使用git方式拉取代码

git config --global url."git@{{gitlab_url}}:groupName/projectName.git".insteadOf "https://{{gitlab_url}}/groupName/projectName.git"` 

也可以直接全局替换,那么可以拉取域名下的所有包,如:

git config --global url."git@{{gitlab_url}}:".insteadof "https://{{gitlab_url}}/"

上面是通过命令修改配置,也可以像这样,直接修改配置文件 ~/.gitconfig,在里面添加如下配置:

[url "git@{{gitlab_url}}:"]
    insteadOf = https://{{gitlab_url}}/

注意:

insteadof 中的参数是 https,因为不管目标地址是http还是https,go get默认使用https方式访问,因此我们要强制将https转换成git协议。

五、最常见的私有不合规库

为什么会有这种恶心至极的私有不合规库?这种库有什么特点?

这种库违反了合规库每一条规则:

  • 1、ip访问
  • 2、端口非80、443
  • 3、没有证书

其中第3点并不重要,第2点是产生这种情况的根源。

这种情况下,我们要:

  • 1、结合章节 “三、引用私有不合规库”

  • 2、在 go.mod 和 git config 中配置别名(映射)

    通过两次别名,重定向到 IP:Port

    • 2.1、在 go.mod 中配置地址别名,该别名是真实有效的 HTTPS 地址

      go.mod 配置:

      module main
      
      go 1.14
      
      // 替换规则
      replace (
          github.com/pborman/uuid => gitee.com/gober/uuid v1.2.0 // 第一次别名地址,地址真是有效,并且是HTTPS
      )
      
      // 源地址
      require (
          github.com/pborman/uuid v1.2.0
      )
      
    • 2.2、在 git config 中再次配置别名,将 go.mod 中的别名指向真正的地址

      git config --global url."git@192.168.102.73:your/git/repos/path".insteadof "https://gitee.com/gober"
      

注意:
假如你的ssh端口也改了,不是22,记得git@{{gitlab_url}}里面也要相应修改

参考资料及附录


本文由 qingchuwudi 译制或原创,除非另有声明,在不与原著版权冲突的前提下,本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:qingchuwudi

查看原文:go modules 使用本地库、公开库和私有库

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

178 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传