必须在 $GOPATH/src 下执行 bee new,因其硬编码依赖传统 Go 工作区路径解析,import 路径需严格匹配 $GOPATH/src/项目名,否则包无法识别、控制器不加载、路由失效。

必须在 $GOPATH/src 下执行 bee new,否则项目根本跑不起来——这是 90% 新手卡住的第一步。
为什么不能在任意目录下 bee new myapp
Beego 的 bee 工具不认 go.mod,它硬编码依赖 Go 传统工作区路径解析逻辑:包导入路径 = $GOPATH/src/xxx。你在桌面新建 mkdir myapp && cd myapp && bee new . 后:
-
main.go里import "myapp/controllers"→ 报错cannot find package "myapp/controllers" - 即使手动改 import 路径,
bee run启动后访问/仍是 Beego 默认页 →MainController根本没被加载,路由未注册 - 控制器方法写得再对也没用,因为包没被编译进二进制
正确创建流程(三步不能跳)
打开终端,逐条执行:
- 运行
go env GOPATH确认输出有效路径(如/home/user/go或C:\Users\xxx\go) - 进入该路径下的
src目录:cd $GOPATH/src(Linux/macOS)或cd %GOPATH%\src(Windows) - 直接运行
bee new myproject(不加.、不加路径、不进子目录)
此时生成的目录是 $GOPATH/src/myproject/,所有 import 路径自动匹配,controllers.MainController 才能被正确解析和加载。
routers/router.go 必须显式注册路由
Beego 不会自动扫描控制器方法。只写 MainController 结构体、不调用 beego.Router,等于白写。常见现象:
- 浏览器打开
http://localhost:8080显示 Beego 默认欢迎页(说明根路由没被覆盖) - 自定义的
MainController.Get()完全不触发
确保 routers/router.go 中有类似:
beego.Router("/", &controllers.MainController{})
注意传入的是指针 &controllers.MainController{},不是类型名 controllers.MainController;如果只是返回纯文本,用 beego.Get("/", func(ctx *context.Context) { ctx.WriteString("OK") }) 更轻量。
模板渲染失败的三个硬性条件
用 c.TplName = "index.tpl" 渲染时,缺一不可:
-
views/index.tpl文件真实存在(路径区分大小写;若放views/admin/下,就得写c.TplName = "admin/index.tpl") -
conf/app.conf中templateleft = "{{"和templateright = "}}"已配置(默认已配好,但改过就必须重启bee run) -
main.go中调用了beego.Run()(仅写http.ListenAndServe不会启用模板引擎)
最常被忽略的是数据字段名不匹配:模板里写 {{.Data.Website}},但实际传的是 c.Data["Website"] = "xxx" → 应写 {{.Website}}。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











