go mod 小范围迁移方案

  • Gitlab 配置

    • 配置域名,确保 view-source:<http://git.arsyun.com/hos/go-lib-websocket?go-get=1里出现正确的域名而不是IP>
    • HTTPS 建议配置但不是必须(不配置则必须配置 GOINSECURE 环境变量,或者通过 go env -w KEY=VALUE配置)
  • 项目里如何引用

    • 其他使用 GOPATH 模式的项目不用改任何东西

    • 新项目

      • 启用 GO111MODULE=on

      • 使用 GOPROXY 中国镜像

        • GOPROXY=https://goproxy.cn,direct
      • 对于局域网服务,绕过

        GOPROXY
        • 配置 GOPRIVATE=git.arsyun.com
      • 配置 Gitlab 访问权限

        • SSH: ~/.gitconfig
        • HTTP: ~/.netrc
      • 使用指定分支进行引用

      • 依赖的旧项目有两种使用方案

        • 在新分支(统一暂时定为 gomod 分支)启用 gomod
        • 使用 replace 引用本地仓库

一键配置脚本

#!/bin/bash

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOPRIVATE=git.arsyun.com
go env -w GOINSECURE=git.arsyun.com

git config --global --add url."git@git.arsyun.com:".insteadOf "<http://git.arsyun.com/>"

# 然后配置 gitlab 里的 ssh 公私钥

# 体验一下
go get git.arsyun.com/hos-device/go-srv-device-logcollector@5b6efee

旧项目如何迁移到 go mod

  1. 脚本替换 module 引用方式(更新 module 名字,更新 module 引用名字)
#!/bin/bash

declare -a groups=(hos hos-device hos-disk)
for x in ${groups[@]}; do
    echo $x
    sed -i "s,\\"$x/,\\"git.arsyun.com/$x/,g" **/*.go
    sed -i "s,\\"$x/,\\"git.arsyun.com/$x/,g" go.mod
done
  1. go build ./... 验证是否完成迁移,如果出现小问题手动修复

参考


   转载规则


《go mod 小范围迁移方案》 bill 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Golang设置国内代理 Golang设置国内代理
Golang V1.13之后支持通过设置变量GOPROXY来修改代理地址,默认的代理服务器https://proxy.golang.org在国内访问经常出现timeout 可以通过设置国内代理来加速下载 详见:https://github
2019-07-11
本篇 
go mod 小范围迁移方案 go mod 小范围迁移方案
Gitlab 配置 配置域名,确保 view-source:<http://git.arsyun.com/hos/go-lib-websocket?go-get=1里出现正确的域名而不是IP> HTTPS 建议配置但不是必须
2019-07-11
  目录