Beego项目必须在GOPATH/src下执行bee new创建,否则import失败、路由不注册、模板不渲染;路由须在routers/router.go的init()中显式注册,控制器方法需首字母大写且接收*beego.Controller指针。

Beego 项目不能在任意目录下用 bee new 创建,否则 import 路径失效、路由不注册、模板不渲染——90% 的“启动成功但访问 404”问题都源于此。
必须在 GOPATH/src 下执行 bee new
Beego 的 bee 工具硬编码查找 conf/app.conf 和 routers/router.go 的相对路径,并依赖 GOPATH 解析包导入。不在 $GOPATH/src 下新建,main.go 中的 import "myapp/controllers" 会直接报 cannot find package。
- 先查路径:
go env GOPATH(例如输出/home/user/go) - 再进目录:
cd /home/user/go/src(Windows 是cd C:\Users\xxx\go\src) - 最后创建:
bee new myapp(不要带路径,不要加.或./myapp) - 验证成功:生成的目录必须是
$GOPATH/src/myapp/,且main.go里 import 的路径与该位置严格对应
routers/router.go 的 init() 是唯一合法路由注册入口
Beego 不扫描控制器,也不读取函数名自动映射。所有 beego.Get、beego.Router 必须写在 routers/router.go 文件的 func init() 函数里——写在 main.go、控制器文件或任意其他地方,beego.Run() 启动后路由表为空,一律返回 404。
- 正确写法:
beego.Router("/user/:id([0-9]+)", &controllers.UserController{}, "get:Get;post:Post"),注意第三个参数是method:action映射字符串,不是拼接 - 别漏掉取地址符:
&controllers.MainController{}是合法控制器实例,controllers.MainController{}是类型字面量,会 panic - 轻量场景可跳过控制器:
beego.Get("/", func(ctx *context.Context) { ctx.WriteString("OK") }),适合快速验证
控制器方法必须满足两个硬性条件
Beego 通过反射调用控制器方法,只认首字母大写的导出方法,且接收者必须是 *beego.Controller 指针。小写方法、值类型接收者、嵌入方式错误,都会导致方法静默不执行——无报错、无日志、请求卡住或返回空响应。
- 结构体必须直接嵌入:
type MainController struct { beego.Controller }(不是组合字段,不是指针字段,不能省略) - 方法签名必须是:
func (c *MainController) Get() { ... }(首字母大写 +*beego.Controller指针接收者) - 取 URL 路径参数用:
c.Ctx.Input.Param(":id");取表单字段才用c.GetString("name") -
Prepare()适合权限检查,但若调了c.StopRun(),后面逻辑必须显式 return,否则仍会继续执行
配置和模板不会自动生效,路径敏感且需手动触发
conf/app.conf 默认不加载,views/ 下的模板默认不启用,日志默认不初始化。即使文件存在,路径错一位、大小写不一致、没调 beego.Run(),就等于没写。
- 模板路径必须完全匹配:
c.TplName = "admin/index.tpl"→ 文件必须是views/admin/index.tpl(大小写敏感) - 传数据用
c.Data["Title"] = "xxx",模板里写{{.Title}},不是{{.Data.Title}} - 配置加载依赖
beego.LoadAppConfig("ini", "conf/app.conf"),通常放在main.go开头;不加这句,beego.AppConfig.String("httpport")返回空字符串 - 日志写入需显式设置:
beego.SetLogger("file", `{"filename":"logs/app.log"}`),否则beego.Info()只打到终端,不落盘
最常被忽略的是:路由注册位置、控制器接收者类型、模板路径大小写、配置加载调用——它们不报错,但让整个项目“看起来跑起来了,实际什么都没响应”。调试时优先盯死这四点,比翻日志更快定位问题。


















