Beego开发流程以conf/controllers/models/views/routers五目录职责划分为核心,v2版本需确认go.mod依赖、main.go入口函数及路由注册位置,模板路径、数据库连接和热重载限制均须严格遵循规范。

Beego 的开发流程不靠死记硬背,而靠“结构驱动”——只要理解 conf/controllers/models/views/routers 这五个目录的职责边界和协作关系,就能快速写出可运行、可调试、可交付的代码。
beego new 创建项目后必须立刻检查的三件事
新建项目只是起点,bee new myapp 生成的骨架默认用的是 Beego v2,但很多教程仍混用 v1 路径,容易在 import 时直接报错。
- 确认
go.mod中依赖是github.com/beego/beego/v2,不是github.com/astaxie/beego - 检查
main.go是否调用adapter.Run()(v2)而非beego.Run()(v1) - 运行前先执行
go mod tidy,否则controllers/default.go里beego.Controller会标红——这不是代码错,是模块没拉全
路由注册必须写在 routers/router.go 里,别在 controller 里硬编码
Beego v2 强制要求路由与控制器解耦。你在 controllers/default.go 里写的逻辑再完整,不注册进 routers/router.go,请求根本到不了。
-
routers/router.go中调用beego.Router("/", &controllers.MainController{}, "get:Get")是最简写法 - RESTful 路由推荐用
beego.RESTRouter(&controllers.ArticleController{}),它自动绑定/article下的 GET/POST/PUT/DELETE 到对应方法 - 别把路由写进
main.go:v2 已移除全局beego.Router函数,硬写会编译失败
模板渲染失败?先查 beego.BConfig.WebConfig.TemplateLeft 和路径大小写
Beego 默认用 {{ 作左定界符,但如果你改过 conf/app.conf 里的 templateleft = "[[",而模板里还写 {{.Title}},就会静默失败——页面空白,日志无报错。
- 模板文件必须放在
views/目录下,且扩展名需为.tpl或.html(.gohtml需手动配置) - 调用
this.TplName = "index.tpl"时,路径是相对于views/的,写成"views/index.tpl"反而找不到 - Linux/macOS 下注意大小写:
Index.tpl和index.tpl是两个文件,Windows 不敏感但部署到服务器就 404
数据库操作卡住?别急着写 ORM,先跑通 raw SQL 测试连接
新手常卡在 orm.RegisterDriver 报错或 orm.RunSyncdb 无反应,本质是数据库连不上,但 Beego ORM 的错误提示极简,甚至不抛异常。
- 在
models/init.go初始化 ORM 前,先用sql.Open("mysql", "user:pass@tcp(127.0.0.1:3306)/test?charset=utf8mb4")测通原生连接 -
orm.RegisterDataBase("default", "mysql", ...)的第三个参数必须是完整 DSN 字符串,漏掉?charset=utf8mb4可能导致中文乱码或初始化失败 -
orm.RunSyncdb("default", false, true)第二个参数为false表示不删表,适合开发阶段;设为true会清空已有表结构
最容易被忽略的是:Beego 的热重载(bee run)只监听 controllers/、models/、routers/ 和 views/ 下的改动,conf/app.conf 修改后必须手动重启——很多人改了端口却一直连旧地址,就是这个原因。


















