Beego 项目修改控制器后不会自动生效,必须用 bee run 启动并确保监听配置正确——这是唯一能触发“类热重载”行为的方式;直接 go run main.go 或手动编译完全不支持任何自动重启。

Beego 项目修改控制器后不会自动生效,必须用 bee run 启动并确保监听配置正确——这是唯一能触发“类热重载”行为的方式;直接 go run main.go 或手动编译完全不支持任何自动重启。
必须用 bee run 启动服务
Beego 没有运行时热替换能力,所谓“热加载”本质是 bee 工具监听文件变更后杀掉旧进程、重新编译、再启动新进程。这个流程只在 bee run 下激活:
- 若执行
go run main.go,哪怕改了controllers/default.go,也必须手动 Ctrl+C + 再运行才能看到效果 -
bee run默认只监听.go文件,控制器代码(.go)天然在监听范围内,无需额外配置即可响应修改 - 启动时控制台出现
[INFO] Restarting myapp日志,才是热加载链路正常工作的明确信号
修改 bee.json 扩展监听类型
默认情况下,改模板(.tpl)、CSS(.css)、配置(.conf)不会触发重启,需手动干预。要让这些变更也生效,得在项目根目录加 bee.json:
{ "watch_ext": ["go", "conf", "html", "css", "js", "tpl"] }
注意:
- 路径必须是项目根目录(含
main.go和conf/的那一层),不是controllers/或views/ - 添加
conf后,改conf/app.conf中的httpport或runmode也会触发重启,避免手动 reload 配置 - 不建议加
.log或.tmp等无关后缀,否则可能因频繁写入导致误重启
会话丢失和编译错误是两个最常卡住开发的点
热加载不是无感的,这两个问题几乎每次都会遇到:
- 只要控制器里有语法错误(比如少个
}、变量声明未使用),bee就停在错误日志不动,也不会重启;必须修复保存后,它才继续监听 - 默认
sessionprovider = memory,每次重启 Session 全丢——开发期若依赖登录态,得立刻切到redis:
在conf/app.conf里写:sessionprovider = redissessionproviderconfig = "127.0.0.1:6379" - 即使用了 redis,首次启动没连上也会报错退出,得确认
redis-server已运行
版本与路径结构不匹配会导致 bee run 静默失败
bee 不报错但不监听文件,大概率是项目结构或版本不合规:
- 必须存在
conf/app.conf,且其中runmode = dev(非prod);runmode = prod时 bee 会跳过监听逻辑 - 控制器必须放在
controllers/目录下,且包名是controllers;如果放错位置(如handler/)或包名写成main,bee 仍会重启,但路由找不到新逻辑 - 推荐检查
bee version≥ 1.4.1、beego≥ 1.6.0;老版本(如 bee 1.2.x)对 Go 1.20+ 兼容性差,可能监听失效
真正卡住人的从来不是“怎么开热加载”,而是改完控制器后浏览器没变化——这时候先盯紧终端有没有 [INFO] Restarting,再查 app.conf 的 runmode 和 bee.json 路径,最后看是不是 redis 没起来或者 session 配置写错了字段名。


















