bee new 项目名必须在 $gopath/src 下执行,因早期 bee 严格校验路径,否则报错;需先 cd $gopath/src 再运行命令,成功时输出 [succ] 并生成含 conf/、controllers/、routers/router.go 等的标准目录结构。

bee new 项目名必须在 $GOPATH/src 下执行
早期版本的 bee new 会严格检查当前路径是否位于 $GOPATH/src 内,否则报错:ERROR: please run bee new in $GOPATH/src。这不是 bug,是设计约束——因为 Beego 项目依赖 Go 的传统包导入路径机制。
实际操作中容易踩的坑:
- 用
go mod init初始化过模块的目录下执行bee new,大概率失败(bee v2.x 之前不兼容 module 模式) - 即使设置了
GO111MODULE=on,bee new仍会尝试走 GOPATH 路径逻辑 - Windows 用户常把项目建在
C:\myproject,结果命令静默失败或生成空目录
解决办法很简单:先 cd $GOPATH/src,再运行 bee new myapp。验证是否成功,看输出里有没有 [SUCC] New application successfully created! 和标准目录结构(含 routers/router.go、conf/app.conf)。
bee run 热编译只监控 .go 文件,默认不重载 app.conf 变更
bee run 的核心价值是热编译,但它默认只监听 .go 文件变化并触发 rebuild。很多新手改完 conf/app.conf 里的 httpport 或 runmode 后刷新页面没反应,以为配置失效,其实是服务根本没重启。
正确做法:
- 手动 Ctrl+C 停掉
bee run,再重新执行一次 - 加
-downdoc=true参数可同时监控.conf和.tpl文件(仅 bee v2.0+ 支持) - 若用 VS Code,建议关闭 “Auto Save” 或设为 “afterDelay”,避免频繁保存触发无意义 rebuild
注意:bee run 启动后默认绑定 127.0.0.1:8080,不能直接通过局域网 IP 访问——要改 app.conf 中的 httpaddr = 0.0.0.0 才行,且必须重启。
bee api 和 bee new 生成的目录结构差异直接影响路由初始化方式
两者都创建 Beego 项目,但 bee api myapi 生成的项目默认启用 RESTful 风格路由,并在 routers/router.go 中调用 beego.Router + beego.AutoRouter 组合;而 bee new myweb 用的是纯 beego.Router 显式注册,控制器需手动实现 Get()、Post() 方法。
这意味着:
- 用
bee api创建的项目,控制器里写func (c *MainController) URLMapping() { c.Mapping("Get", "GetAll") }是合法的;bee new项目不支持该写法 -
bee api默认禁用模板渲染(autorender = false),返回 JSON;bee new默认开启,返回 HTML - 如果后续要把 Web 项目改成 API 服务,光改
app.conf不够,必须同步调整routers/router.go和控制器方法签名
bee version 显示的 beego 版本可能和实际 import 路径不一致
执行 bee version 输出类似:bee : 2.1.0, beego : 2.0.2,但这只是 bee 工具自身 vendor 的 beego 版本,不代表你项目里 import "github.com/beego/beego/v2" 实际加载的是哪个。
真实版本由以下三者共同决定:
-
go.mod中require github.com/beego/beego/v2 v2.1.0的声明(module 模式下优先) - 项目
main.go中 import 路径是否带/v2或/v1 - 如果没开 module,就取决于
$GOPATH/src/github.com/beego/beego/目录下的代码快照
最容易被忽略的一点:当你升级 bee 工具后,它自带的 beego 版本可能比项目依赖的新,也可能更旧。判断依据永远是 go list -m github.com/beego/beego/v2,而不是 bee version。











