题图

本文永久链接https://tonybai.com/2026/07/06/get-started-with-gvu-in-5-minutes

大家好,我是Tony Bai。

上一篇《五年,三篇文章,一个我一直没真正解决的问题》里,我记录了这五年折腾私有 Go module 拉取方案的几段经历,也提到今年白盒交付给客户时踩的新坑。文章结尾我说会把这个工具单独写篇上手文章——今天这篇就是它。

gvu(GomodVanityUrls 的缩写)现在正式开放公测,官网在 gomodvanityurls.com。这篇文章不谈太多背景,直接上手,5 分钟带你走完从安装到拉取用上第一个私有 module 的完整流程。

gvu 是什么

一句话概括:gvu 是一个命令行工具,用来把 Go module 的 vanity import path(比如 mycompany.com/go/common)映射到你真实的代码仓库地址(GitHub / GitLab / Bitbucket / Codeberg / 自建仓库都支持),全程一行命令搞定,不需要你再手写 govanityurls 的 YAML 配置,也不需要自己维护 Nginx。

如果你看过我五年前那几篇搭建私有 Go module 拉取方案的文章,就知道这背后原本要做的事:起一个 govanityurls 服务、写映射配置、配 Nginx 反代、(如果要自定义域名)自己签 TLS 证书。gvu 把这一整套操作压缩成了一行 gvu add

安装

Linux / macOS

curl -fsSL gomodvanityurls.com/install.sh | bash

Windows

如果你用 Git Bash / MSYS2 / Cygwin/ WSL/ WSL2,直接执行和上面一样的命令即可,脚本会自动识别 Windows 环境并下载对应的 .exe

如果你在Windows上使用 Scoop 的话,可以在Powershell命令行里执行下面:

scoop bucket add gomodvanityurls https://github.com/gomodvanityurls/scoop-bucket
scoop install gvu

装完之后,跑一下 gvu --version 确认安装成功。

添加你的第一个 vanity URL

最简单的方式是直接用 gvu 提供的默认域名 gomod.io不需要注册、不需要配 Domain解析,一行命令(以你的私有仓库在github.com上为例):

$ gvu add gomod.io/private-module https://github.com/yourorg/private-module.git

✔ Route created successfully!
═══════════════════════════════════════════════════════════
┃ Route ID:     m_abc123
┃ Vanity Path:  gomod.io/private-module
┃ Target Repo:  https://github.com/yourorg/private-module.git
┃ Quota:        1 / 5 used
═══════════════════════════════════════════════════════════

这条命令执行时,gvu 会自动帮你创建一个匿名账号(免签名、免邮箱),并且自动识别出这是个 GitHub 仓库。GitLab、Bitbucket、Codeberg 或者你自己内网的 GitLab 也都是同样的用法,把仓库地址换掉即可,gvu 会自动识别托管平台。

如果你的仓库需要用 SSH 方式拉取,也可以直接传 SSH 地址:

gvu add gomod.io/private-module ssh://git@github.com:yourorg/private-module.git

告诉 Go 工具链去哪里解析这个路径

export GOPRIVATE=gomod.io

建议把这行加到你的 ~/.bashrc~/.zshrc 里,一劳永逸。

在代码里用起来

在你的 go.mod 里,module path 要直接用 vanity path,而不是原始的 Git 托管地址:

// go.mod —— 正确
module gomod.io/private-module

// go.mod —— 错误,会直接去github上拉去私有仓库
module github.com/yourorg/private-module

如果你的模块之前用的是 github.com/... 这样的 module path,迁移时记得把它改成 vanity path 再发布。

改好之后,同组织内有github.com私有仓库访问权限的人 import "gomod.io/private-module" 就能正常拉取了。

Go 工具链会自动把这个 vanity path 解析到你背后真实的仓库地址——以后即便你把代码从 GitHub 挪到自建 GitLab,只要在 gvu 里改一下映射,所有使用方的 import path 完全不用变。这也是五年前我们折腾 govanityurls 时最看重的那个特性,gvu 把它继承了下来,而且不需要你自己运维那套基础设施。

管理你的路由

# 查看所有已注册的路由
gvu list

# 删除一个路由
gvu remove m_abc123

# 批量删除
gvu remove m_abc123 m_def456 -y

如果你的仓库结构更复杂一点

Monorepo 场景:如果一个仓库里有多个 Go module(比如 go/module-a/go.mod),用 --subdir 指定子目录(需要 Go 1.25+):

gvu add gomod.io/module-a https://github.com/yourorg/monorepo.git --subdir go/module-a

自定义域名场景:如果你不想用 gomod.io 这个默认域名,想用自己或公司的域名(比如 go.mycompany.com)做 vanity path 前缀,需要先升级到 Verified 账号(免费,只需绑定邮箱)并配置好 DNS CNAME。这部分内容稍微多一点,我会放在下一篇有关gvu使用的文章中详细讲,因为这正好对应我们当年真实的迁移场景。

账号与配额

匿名账号(也就是你什么都不注册、直接 gvu addgvu auth signup时自动创建的那种)免费可以用 5 个路由,够个人项目和小范围试用。用 gvu auth bind your@email.com 免费升级成 Verified 账号可以拿到 10 个,并解锁自定义域名。如果你需要更大的配额或者短路径这类进阶能力,可以看一眼 pricing 页面,这篇就不展开了。

大家随时可以用下面这条命令看自己账号的状态:

gvu auth whoami

小结

到这里,你应该已经跑通了从安装到用上第一个私有 module 的完整流程——中间没有 Nginx,没有 YAML,也没有证书要自己签。

这就是 gvu 现在的公测版本。如果你在使用中遇到问题,或者有功能上的想法,欢迎去 Community 页面 ,或使用gvu issue 反馈,我会认真看每一条。

下一篇我会把五年前那套"手动 govanityurls + Nginx"的方案,原样迁移到 gvu 上,一步步对比迁移前后到底省了多少事——这也是很多老读者最关心的问题:如果我已经有一套手搭的方案,值不值得换。


还在为写 Agent 框架频频死循环、上下文爆炸而束手无策?我的新专栏 从0 开始构建 Agent Harness 将带你:

  • 抛弃臃肿框架,回归“驾驭工程 (Harness Engineering)”的第一性原理
  • 用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等,复刻极简OpenClaw
  • 构建坚不可摧的 Safety Middleware 与飞书人工审批防线
  • 在底层实现 Token 成本审计、链路追踪与自动化跑分评估
  • 从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”

扫描下方二维码,开启从 0 开始构建Agent Harness 的实战之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。