bee new 必须在 $gopath/src 下执行,否则包导入失败、路由不注册、模板不渲染;router.go 需显式注册路由,模板路径与数据字段名须严格匹配。

bee new 必须在 GOPATH/src 下执行,否则包导入失败、路由不注册、模板不渲染
Beego 项目不是“新建目录就能跑”。bee 工具依赖 Go 的传统工作区路径推导逻辑,即使项目启用了 go.mod,它仍按 GOPATH/src/xxx 解析 import 路径。
常见错误现象:
-
cannot find package "myapp/controllers"—— 因为main.go中写的是import "myapp/controllers",而 Go 只在$GOPATH/src下搜索该路径 -
bee run启动后访问/返回 404 —— 实质是控制器没被加载,路由注册失效
实操建议:
- 运行
go env GOPATH确认输出有效路径(如/home/user/go) -
cd $GOPATH/src,再执行bee new myapp - 不要先
mkdir myapp && cd myapp && bee new .—— 这会导致包路径与 import 声明不一致
routers/router.go 必须显式调用 beego.Router 或 beego.Get
Beego 不会自动扫描控制器方法,所有路由都得手动注册。只写 MainController.Get() 而不在 router.go 里声明,等于没写。
常见错误现象:
- 浏览器打开
@#@#@#@#@#@#@#@#@#@0显示 Beego 默认欢迎页(说明根路由未被覆盖) - 自定义的
MainController.Get()完全不触发
实操建议:
- 确保
routers/router.go中有类似beego.Router("/", &controllers.MainController{}) - 若只需响应 GET,用
beego.Get("/", func(ctx *context.Context) { ctx.WriteString("OK") })更轻量 - 注意参数必须是控制器指针(
&controllers.XxxController{}),不是类型(controllers.XxxController)
c.TplName 渲染模板需同时满足三个硬性条件
用 c.TplName = "index.tpl" 渲染视图时,缺一不可:
-
views/index.tpl文件存在(路径严格区分大小写) -
conf/app.conf中templateleft = "{{"和templateright = "}}"已配置(默认已设好) -
main.go中调用了beego.Run()—— 否则模板引擎根本不启用
容易踩的坑:
- 把
index.tpl放在views/admin/下,却写c.TplName = "index.tpl"(应写"admin/index.tpl") - 模板里写
{{.Data.Website}},但实际传的是c.Data["Website"] = "xxx"(应写{{.Website}}) - 修改了
app.conf但没重启bee run,配置未生效
Beego 的初始化路径约束和路由注册是强耦合环节,漏掉任一环都会导致服务看似启动成功,实则请求无响应。最常被忽略的是:bee new 执行位置不对 + router.go 里忘了加那行 beego.Router。











