从Glide迁移到Go Mod:Golang依赖管理工具转换指南
从Glide迁移到Go Mod:Golang依赖管理工具转换指南 我正在使用 Go 版本 1.14。到目前为止,我们一直使用 glide 包管理器来安装私有和公共仓库的包。
现在,当我尝试从 glide 迁移到 go mod 时,在执行 go mod init 时遇到了错误。
它读取了由 glide.yaml 创建的 go.mod 文件中的公共仓库,但对于私有仓库,我遇到了错误。
我们的私有仓库在 Bitbucket 上。
您能指导一下逐步迁移的步骤吗?
我需要部署相同的配置。
你遇到了什么类型的错误?不过,看起来你的问题与私有仓库和公共代理有关。我在这里描述过:https://developer20.com/golang-tips-and-trics-vii/
更多关于从Glide迁移到Go Mod:Golang依赖管理工具转换指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
从Glide迁移到Go Modules时处理私有仓库需要额外配置。以下是具体步骤:
1. 配置Git访问私有仓库
首先确保Git能访问Bitbucket私有仓库。对于SSH方式:
# 测试SSH连接
ssh -T git@bitbucket.org
对于HTTPS方式,配置Git凭证存储:
git config --global credential.helper store
2. 设置Go Modules代理和私有仓库
创建或编辑 ~/.gitconfig 文件:
[url "git@bitbucket.org:"]
insteadOf = https://bitbucket.org/
设置Go环境变量:
# 允许访问私有仓库
export GOPRIVATE=bitbucket.org/yourcompany
# 或者设置多个私有仓库
export GOPRIVATE=bitbucket.org/yourcompany,bitbucket.org/anotherrepo
# 禁用代理对私有仓库的访问
export GONOPROXY=bitbucket.org/yourcompany
export GONOSUMDB=bitbucket.org/yourcompany
3. 迁移步骤
# 备份现有配置
cp glide.yaml glide.yaml.backup
cp glide.lock glide.lock.backup
# 初始化go.mod,指定正确的模块路径
go mod init bitbucket.org/yourcompany/projectname
# 尝试tidy,可能会遇到私有包错误
go mod tidy
# 如果遇到认证错误,手动添加replace指令
4. 处理glide.yaml中的私有依赖
编辑生成的go.mod文件,手动添加私有依赖:
module bitbucket.org/yourcompany/projectname
go 1.14
require (
github.com/public/pkg v1.2.3
bitbucket.org/yourcompany/private-repo v0.1.0
)
replace bitbucket.org/yourcompany/private-repo => ../private-repo
或者使用本地路径替换:
replace bitbucket.org/yourcompany/private-repo => ./vendor/bitbucket.org/yourcompany/private-repo
5. 使用vendoring模式(如果需要)
# 启用vendor模式
go mod vendor
# 构建时使用vendor目录
go build -mod=vendor
6. 完整迁移脚本示例
#!/bin/bash
# migrate_glide_to_gomod.sh
export GOPRIVATE="bitbucket.org/yourcompany/*"
export GO111MODULE=on
# 清理旧缓存
go clean -modcache
# 初始化模块
go mod init $(git config --get remote.origin.url | sed 's/\.git$//' | sed 's/.*://')
# 尝试更新依赖
go mod tidy 2>&1 | tee mod_errors.log
# 如果有私有包错误,手动处理
echo "处理私有依赖..."
for pkg in $(grep "bitbucket.org/yourcompany" glide.yaml | awk '{print $2}'); do
echo "添加私有包: $pkg"
go get $pkg
done
# 最终整理
go mod tidy
go mod vendor
7. Docker部署配置
在Dockerfile中配置私有仓库访问:
FROM golang:1.14-alpine
# 安装Git和SSH客户端
RUN apk add --no-cache git openssh-client
# 配置SSH密钥(通过Docker secret或build argument)
ARG SSH_PRIVATE_KEY
RUN mkdir -p /root/.ssh && \
echo "$SSH_PRIVATE_KEY" > /root/.ssh/id_rsa && \
chmod 600 /root/.ssh/id_rsa
# 配置Git
RUN echo "StrictHostKeyChecking no" >> /root/.ssh/config
# 设置Go环境
ENV GOPRIVATE=bitbucket.org/yourcompany
ENG GO111MODULE=on
WORKDIR /app
COPY . .
RUN go mod download
RUN go build -o app .
8. 验证迁移
创建测试文件验证导入:
// main_test.go
package main
import (
"testing"
_ "bitbucket.org/yourcompany/private-repo"
_ "github.com/public/pkg"
)
func TestImports(t *testing.T) {
// 如果编译通过,说明导入成功
t.Log("所有依赖导入成功")
}
运行测试:
go test -v
9. 持续集成配置
在CI/CD中配置环境变量:
# .gitlab-ci.yml 或类似配置
variables:
GOPRIVATE: "bitbucket.org/yourcompany"
GIT_STRATEGY: clone
GIT_SUBMODULE_STRATEGY: recursive
before_script:
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- echo "Host bitbucket.org" >> ~/.ssh/config
- echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
这些步骤应该能解决从Glide迁移到Go Modules时遇到的私有仓库访问问题。关键点是正确配置GOPRIVATE环境变量和Git的认证方式。

