在 GitLab 服务上快速构建 Go 项目的私有化包
发布时间 2023年11月7日 (更新时间 2024年4月1日) • 2 分钟 读完 • 237 字本篇文章中帮助您理解并构建 Go 项目的私有化包,我们将介绍如何在GitLab服务上构建Go项目的私有化包,并在另一个Go项目中使用。

在这篇文章中,我们将介绍如何在 GitLab 服务上构建 Go 项目的私有化包,以及如何在另一个Go项目中使用这个私有包。以下是详细的步骤和注意事项。
以我司为例,有 ToB、ToC 业务,又有内部项目,这些业务有些是重合的,那么这部分代码的重用,使用私有化包就可以解决。
私有化包的好处:
以 ga-omni 为例,创建私有化包 ga-omni 的步骤如下:
2.1 创建私有化包项目 在GitLab上创建一个新的仓库,命名为 ga-omni
mkdir ga-omni && cd ga-omni
go mod init gitlab.domain.com/backend/ga-omnigitlab.domain.com/backend/package/ga-omni2.2 编写 ga-omni 包代码
编写你的Go包代码,并确保包含go.mod文件用于管理依赖。
// ga-omni/main.go
package gaomni
func Hello() string {
return "Hello from ga-omni!"
}2.3 提交并推送ga-omni包代码
将代码提交到GitLab仓库,并推送。
git add .
git commit -m "Initial commit"
git push origin master2.4 设置Go环境 在titan项目中执行以下步骤设置Go环境:
go env -w GOPRIVATE="gitlab.domain.com"设置后,go env 查看配置项中,GOPRIVATE、GOINSECURE、GONOPROXY、GONOSUMDB 四个配置值是否都已变更为目标值。
...
...
GOPRIVATE='gitlab.domain.com'
GOINSECURE='gitlab.domain.com'
GONOPROXY='gitlab.domain.com'
GONOSUMDB='gitlab.domain.com'在任何Go项目中,你可以通过以下方式测试 ga-omni 包是否正常工作:
go get gitlab.domain.com/backend/ga-omni直接这样拉取需私有包要输入 gitlab 认证账号和密码,为避免 https 协议每次需要认证的麻烦,可以配置 git host 为 gitlab.domain.com 时,走 ssh 协议,通过 key 的方式认证。
3.1 配置 Git SSH认证,方式一
确保你的GitLab帐户配置了SSH密钥,并且Go使用SSH进行包拉取。在~/.ssh/config文件中添加以下内容:
Host gitlab.domain.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/your_private_key3.2 配置 Git SSH认证,方式二
## 语法
git config --global url."git@gitlab_url:groupName/projectName.git".insteadOf "https://gitlab_url/groupName/projectName.git"
## 示例
git config --global url."git@gitlab.domain.com:backend/ga-omni.git".insteadOf "https://gitlab.domain.com/backend/ga-omni.git"配置后,查看 git 配置文件会增加一条如下配置行
cat ~/.gitconfig
# This is Git's per-user configuration file.
...
...
[url "git@gitlab.domain.com:backend/ga-omni.git"]
insteadOf = https://gitlab.domain.com/backend/ga-omni.git再次拉取 ga-omni 包测试,以项目 titan 为例,创建 main.go 文件
// main.go
package main
import (
"fmt"
"gitlab.domain.com/backend/ga-omni"
)
func main() {
fmt.Println(gaomni.Hello())
}输出:Hello from ga-omni!,恭喜你搞定了 👏🏻👏🏻 🎉🎉
开发机,titan 项目和私有包 ga-omni 目录位置:
- titan
- package
-- ga-omni开发阶段为了在 IDE 可跳转到私有包 ga-omni,编辑 titan 项目 go.mod 文件,追加如下内容
replace (gitlab.shenjumiaosuan.com/backend/ga-omni => ../package/ga-omni) go.mod 增加 replace 后,再回到代码中,在 IDE 中点击私有包的代码,已经可使代码直接跳转到私有包了,我使用的是 goland ,如果没有你可以在主项目下额外再打开一个窗口,选择 Attch 方式,如下图所示
titan 和 ga-omni 项目在 goland IDE 所在位置
ga-omni,手动打开 ga-omni 项目,选择(Attch)附加到已经打开的项目,如示
开发结束后,代码推送的 Gitlab 版本库,CI/CD自动测试至服部署,参考这篇文章 Gitlab Go 项目CICD 集成
参考文章