go get 拉取特定 v2.x 版本必须显式指定 @vx.y.z,如 go get github.com/beego/beego/v2@v2.3.5;不加 -u,否则可能绕过目标版本;import 路径须含 /v2 且子包明确,如 github.com/beego/beego/v2/server/web。

go get 拉取特定 v2.x 版本时必须加 @vX.Y.Z
Beego v2 不支持用 go get -u 自动升级到某个精确小版本,-u 只会升到最新 patch(比如从 2.3.4 升到 2.3.5),但不会跨 minor 版本(如 2.3.x → 2.4.x)。要锁定安装 2.3.5,必须显式指定版本后缀。
正确写法是:
go get github.com/beego/beego/v2@v2.3.5
注意三点:
-
go get后不加-u,否则可能绕过你指定的版本,拉取缓存里的旧版或 proxy 返回的非目标版本 - 路径末尾必须带
@v2.3.5,不能只写github.com/beego/beego/v2 - 如果项目已有
go.mod,执行后会自动更新其中的require行;若没有,先go mod init myapp
bee 工具也要同步指定版本,否则和 beego 不兼容
beego 和 bee 的 v2 主线虽同源,但发布节奏不同。比如 beego 2.3.5 发布时,bee 可能还停留在 v2.1.0。若你强制用了 beego 2.3.5,但 bee 是 v2.0.0,bee run 可能因内部 API 变更而 panic 或静默失败。
安装匹配的 bee 版本:
go get github.com/beego/bee/v2@v2.1.0
验证是否对齐:
- 运行
bee version看输出里 bee 和 beego 的版本号是否在合理范围内(例如 bee v2.1.x 对应 beego v2.3.x) - 检查
go list -m github.com/beego/beego/v2和go list -m github.com/beego/bee/v2输出的实际 commit 或 tag - 别信
bee version显示的 “beego version: unknown”——它只是没读取到本地依赖,不代表不兼容
go.sum 校验失败?不是版本问题,是模块未 tidy
执行 go get github.com/beego/beego/v2@v2.3.5 后,go.mod 里多了 require 行,但 go.sum 为空或缺失条目,导致 bee run 报 missing go.sum entry。这不是版本选错,而是 Go Modules 的标准校验机制在起作用。
立刻补上这一步:
go mod tidy
它会:
- 下载
v2.3.5所依赖的全部子模块(比如client/orm、server/web) - 生成或更新
go.sum中所有哈希值 - 剔除
go.mod中未被引用的间接依赖
如果 go mod tidy 卡住或报 verifying github.com/...: checksum mismatch,大概率是 GOPROXY 没生效:运行 go env -w GOPROXY=https://goproxy.cn,direct 再试。
main.go 里 import 路径写错,版本再准也启动失败
哪怕你精确装了 v2.3.5,只要 main.go 里还写着:
import "github.com/astaxie/beego"
编译就会报 cannot find package "github.com/astaxie/beego"——因为 v1 路径已废弃。v2 的所有导入都必须带 /v2 后缀,且子包路径明确。
正确写法(以最简 Web 启动为例):
import (
"github.com/beego/beego/v2/server/web"
)
然后启动用 web.Run(),不是 beego.Run()。控制器继承也得改:
- 错:
type MainController struct { beego.Controller } - 对:
type MainController struct { web.Controller }
这个 import 路径错误和版本号无关,但它是“明明装对了却跑不起来”的最高频原因。











