Beego项目必须在GOPATH/src下用bee new初始化,否则包导入失败、路由未注册、模板不渲染;router.go需显式注册路由;模板路径和数据字段名须严格匹配。

Beego 项目不能随便建目录就跑,必须在 GOPATH/src 下用 bee new 初始化,否则包导入失败、路由不注册、模板不渲染——这是新手卡住最频繁的起点。
beego new 必须在 GOPATH/src 下执行
Beego 的 bee 工具仍基于传统 GOPATH 工作区模型,即使项目启用了 go.mod,它仍按 GOPATH/src/xxx 解析包路径。一旦路径错,main.go 里的 import "myapp/controllers" 就会报 cannot find package。
- 先运行
go env GOPATH确认输出(如/home/user/go) - 然后
cd $GOPATH/src,再执行bee new myapp - 严禁
mkdir myapp && cd myapp && bee new .—— 这会让包路径变成./controllers,Go 根本不认 - 初始化后,
main.go中的import路径应为"myapp/controllers",对应磁盘路径$GOPATH/src/myapp/controllers
router.go 必须显式注册路由
Beego 不会自动扫描控制器方法,所有路由都得手动写进 routers/router.go 的 init() 函数里。只写 MainController 结构体,不注册,等于没写。
- 根路径示例:
beego.Router("/", &controllers.MainController{})—— 注意是&controllers.XxxController{},不是controllers.XxxController - 若只需响应 GET,用
beego.Get("/", func(ctx *context.Context) { ctx.WriteString("OK") })更轻量 - 启动后访问
/返回 404?八成是router.go没写这行,或拼写错误(比如漏了&) - 浏览器打开
http://localhost:8080显示 Beego 默认欢迎页?说明你的路由没覆盖根路径,Router("/", ...)没生效
模板渲染要同时满足三个硬条件
写 c.TplName = "index.tpl" 却白屏或报错?大概率是以下任一条件没满足:
-
views/index.tpl文件必须真实存在,且路径大小写敏感(Views/index.tpl或views/Index.tpl都不行) -
conf/app.conf中的templateleft和templateright默认已设为"{{"和"}}",别乱改 -
main.go最后必须调用beego.Run()—— 若改成http.ListenAndServe,模板引擎直接不启用 - 常见错:模板里写
{{.Data.Website}},但控制器传的是c.Data["Website"] = "xxx",应写{{.Website}} - 把
admin/index.tpl放在views/admin/下,却设c.TplName = "index.tpl",得写成c.TplName = "admin/index.tpl"
最容易被忽略的是:修改了 app.conf 或 router.go 后没重启 bee run,热重载不会触发配置重载;还有人把 bee 和 beego 包版本混用(比如 github.com/beego/beego/v2 配老版 bee),会导致路由注册静默失败。


















