推荐方式是 go install github.com/revel/cmd/revel@latest,因旧式 go get github.com/robfig/revel 在 Go Modules 下失效,且依赖已废弃路径;当前稳定 CLI(≥v0.25)需 @latest 保证兼容 revel v1.1.0。

go install github.com/revel/cmd/revel@latest 是唯一推荐方式
旧式 go get github.com/robfig/revel 在 Go Modules 模式下会失败,因为该命令默认走 GOPATH 逻辑,且依赖已废弃的 code.google.com/p/go.net/websocket 等路径。当前(2026年)所有稳定版 Revel CLI(≥v0.25)都通过 github.com/revel/cmd/revel 发布,且明确要求使用 @latest 而非 @v1.1.0 —— 因为 CLI 版本号与框架版本号不再对齐,@latest 才能确保兼容最新 revel v1.1.0。
执行后,二进制会落在 $GOBIN/revel(若未设 GOBIN,则默认在 $GOPATH/bin)。验证是否生效只需:
-
revel version输出含CLI: v0.25+和Framework: v1.1.0 -
which revel返回路径不指向$GOPATH/src/...下的手动编译产物
安装后必须禁用编辑器原子保存(如 VS Code 的 “files.useExperimentalFileWatcher”)
Revel 的热重载(revel run)依赖文件系统事件监听,而现代编辑器的“原子写入”机制(先写临时文件再 rename)会导致 .revelignore 失效、路由重载漏触发、甚至 app/init.go 修改后无反应。这不是 Revel Bug,是 inotify 事件丢失的共性问题。
实操建议:
- VS Code:在设置中关闭
files.useExperimentalFileWatcher,并确认files.watcherExclude包含"**/.git/**"和"**/node_modules/**" - Sublime Text:禁用
atomic_save - JetBrains 系列:在 Settings → System Settings → Use "safe write" 前打钩取消
revel new 生成的项目默认启用 Go Modules,但需手动补全 go.mod 中的 revel 依赖
revel new myapp 会创建 go.mod,但早期生成器(包括 v0.25 初期)不会自动写入 github.com/revel/revel v1.1.0,导致 revel run 启动时提示 cannot find package "github.com/revel/revel"。
修复步骤很直接:
- 打开
go.mod,在require块末尾添加一行:github.com/revel/revel v1.1.0 - 运行
go mod tidy,它会拉取依赖并修正go.sum - 务必删掉
conf/routes.conf(v1.1.0 已废弃),所有路由必须在app/init.go中显式注册,否则启动后全是 404
GO111MODULE=on 不是可选项,而是硬性前提
即使你项目根目录有 go.mod,如果 go env GO111MODULE 返回 off,revel run 仍会退回到 GOPATH 模式,并报错 not found in GOPATH —— 这个错误信息极具误导性,实际跟 GOPATH 根本无关。
检查与修复:
- 运行
go env GO111MODULE;若输出off,立即执行go env -w GO111MODULE=on - 不要依赖
export GO111MODULE=on的 shell 配置,go env -w是全局持久化设置 - CI/CD 流水线中必须显式声明
GO111MODULE=on环境变量,否则go mod download会静默跳过
真正容易被忽略的是:Go Modules 启用后,revel run 不再解析 GOPATH/src/ 下的任何代码,哪怕你把项目软链接过去也无效。路径只认 go.mod 所在目录及其子目录,其他全是黑盒。











