GOPROXY 与发布
本教程共 80 篇 · 第 71 篇 · 更新于 2026-07-27 · 约 8 分钟阅读
71. GOPROXY 与发布
本节目标:配好 GOPROXY(含国内镜像),看懂语义化版本号规则,学会发布自己的 Go 模块。
GOPROXY 是什么
GOPROXY 控制 Go 从哪里下载模块。默认值是:
GOPROXY=https://proxy.golang.org,direct
意思是:先从 proxy.golang.org 这个公共代理拉,拉不到再 direct(直接去源仓库拉)。
但 proxy.golang.org 在国内访问不稳定,下载经常超时。需要换成国内镜像。
配置国内镜像
国内常用七牛云的 goproxy.cn:
go env -w GOPROXY=https://goproxy.cn,direct
设完立即生效。再跑 go mod tidy 下载就快了。
其他可选镜像:
# 阿里云
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
# 腾讯云
go env -w GOPROXY=https://goproxy.tencent.com,direct
Tip
go env -w会把配置写到~/.config/go/env文件,永久生效。也可以设系统环境变量GOPROXY,效果一样。
GOPROXY 的格式
格式是逗号分隔的列表,带 direct 和 off 两个特殊值:
GOPROXY=https://goproxy.cn,https://proxy.golang.org,direct
Go 按顺序尝试:第一个不行试第二个,都失败了用 direct。off 表示禁止下载。
GOFLAGS
GOFLAGS 给 go 命令设默认参数。比如默认启用 -mod=mod 或 vendor 模式:
go env -w GOFLAGS=-mod=mod
平时很少需要改,了解即可。
GOSUMDB 和 GOPRIVATE
GOSUMDB 校验下载的模块哈希,默认连 sum.golang.org。国内镜像会自动处理这个,一般不用单独配。
如果你有私有模块不想走公共校验,用 GONOSUMDB 或 GOPRIVATE:
go env -w GOPRIVATE=*.corp.example.com,example.com/private/*
GOPRIVATE 同时让这些模块跳过 proxy 和 sumdb,直接走 direct。
语义化版本号
Go 模块用语义化版本(SemVer):v主版本.次版本.修订号
v1.4.2
│ │ └─ 修订号:bug 修复,向下兼容
│ └─── 次版本:新增功能,向下兼容
└───── 主版本:不兼容的 API 变更
不同阶段的含义:
| 版本 | 含义 |
|---|---|
v0.x.x | 开发阶段,不保证稳定 |
v1.x.x | 正式版,API 稳定 |
v2.x.x | 主版本升级,API 不兼容 v1 |
v1.2.3-beta | 预发布版 |
Warning主版本号 v2 及以上,模块路径要加版本后缀。比如
github.com/user/lib的 v2 版本,路径变成github.com/user/lib/v2。否则 Go 无法区分不兼容版本。
发布模块
发布模块很简单,本质上就是把代码推到公共仓库(如 GitHub)并打 tag:
# 1. 整理依赖
go mod tidy
# 2. 跑测试
go test ./...
# 3. 提交代码
git add .
git commit -m "release v0.1.0"
# 4. 打 tag
git tag v0.1.0
# 5. 推送 tag
git push origin v0.1.0
推完 tag,Go 代理会自动抓取。别人就能 go get github.com/yourname/yourmodule@v0.1.0 了。
Note发布后别改已打 tag 的代码!Go 会校验哈希,改了别人下载会报安全错误。要改就发新版本,比如
v0.1.1。
发布前检查清单
- go.mod 里模块路径和仓库地址一致
- go mod tidy 跑过,没有多余依赖
- go test 全部通过
- README 写清楚用法
- LICENSE 文件有
- 版本号符合语义化规范
- tag 格式是
v1.2.3(带 v 前缀)
撤回版本
如果某个版本有问题,用 retract 指令标记撤回:
// go.mod
retract v1.2.3 // 有严重 bug
撤回后 go get 不会选这个版本,已使用的会看到警告。这比删除 tag 好,因为删除会导致已下载的校验失败。
小结
GOPROXY控制下载源,国内用goproxy.cn加速GOPRIVATE让私有模块跳过 proxy 和校验- 版本号
v主.次.修,v2+ 要改模块路径 - 发布就是推代码 + 打 tag,别改已发布版本
- 有问题的版本用
retract撤回,别删 tag
下一部分进入标准库,从 fmt 包开始。