首页 / Go 语言入门教程 / GOPROXY 与发布

Go 语言入门教程

GOPROXY 与发布

本教程共 80 篇 · 第 71 篇 · 更新于 2026-07-27 · 约 8 分钟阅读

GoGo 入门教程GOPROXY国内镜像版本号发布模块GOFLAGS

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 的格式

格式是逗号分隔的列表,带 directoff 两个特殊值:

GOPROXY=https://goproxy.cn,https://proxy.golang.org,direct

Go 按顺序尝试:第一个不行试第二个,都失败了用 directoff 表示禁止下载。

GOFLAGS

GOFLAGS 给 go 命令设默认参数。比如默认启用 -mod=mod 或 vendor 模式:

go env -w GOFLAGS=-mod=mod

平时很少需要改,了解即可。

GOSUMDB 和 GOPRIVATE

GOSUMDB 校验下载的模块哈希,默认连 sum.golang.org。国内镜像会自动处理这个,一般不用单独配。

如果你有私有模块不想走公共校验,用 GONOSUMDBGOPRIVATE

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 包开始。