beego是一个MVC框架,与rails类似,其项目代码有一套推荐的目录结构,用户只需往里面填充代码即可实现路由、过滤、ORM等功能

在命令行使用bee new xxx,可以创建出一个beego项目的模板,其目录结构如下

(models是没有的,filters也是没有的,不过为了演示过滤器的功能,所以我后面会建个filters目录专门存放过滤器配置代码)


当一个beego项目通过main.go运行起来后,其进程内会产生一个如下的结构体,

其中Handlers *ControllerRegister存放着用户通过写代码配置出的路由、过滤器、中间件、controller

Cfg *Config存放着beego默认配置

Server *http.Server则是go标准库net/http下的Server结构体,它的Handler属性会被赋值为实现了ServeHTTP接口的Handlers *ControllerRegister

这样,当Server调用ListenAndServe时,请求就会被交由Handlers *ControllerRegister,经过中间件、过滤器、路由,最终被controller处理


以下是一个简单的beego项目的源码分析

(黄色部分是用户代码,灰色部分是框架代码)