前面我们已经创建了 beego 项目,而且我们也看到它已经运行起来了,通过main.go 入口文件,了解下是如何执行的
package main
import (
"github.com/astaxie/beego"
"webclass/models"
_ "webclass/routers"
_ "webclass/models" //models的init函数加载
)
func main() {
//注册函数,以便可以在模板中使用
beego.AddFuncMap("TimeStampToDate",models.TimeStampToDate)
beego.Run()
}
import _"webclass/routers" 只是执行了 routers 包中的 init() 函数。
在routers/routers.go 文件中 beego.Router("/", &controllers.MainController{})定义了一个路由规则, 访问 / 就是访问的 MainController 控制器。
package routers
import (
"github.com/astaxie/beego"
"webclass/controllers"
)
func init() {
beego.Router("/", &controllers.MainController{})
//自定义一个路由,路由/login, 请求方式get, 访问的是PublicController 中的login 方法
beego.Router("/login",&controllers.PublicController{}, "get:Login")
//登录提交路由设置, 方法是POST, 访问PublicControllber的Loginpost方法
beego.Router("/loginpost", &controllers.PublicController{}, "post:Loginpost")
//退出
beego.Router("logout", &controllers.PublicController{}, "get:LogOut")
//注册页面路由,get方法
beego.Router("/register", &controllers.PublicController{}, "get:Register")
beego.Router("/registerpost", &controllers.PublicController{}, "post:Registerpost")
beego.Router("/test", &controllers.PublicController{}, "get:TestJump")
beego.Router("/jump", &controllers.PublicController{}, "get:Jump")
//用户路由
beego.Router("/mainpage", &controllers.UserController{}, "get:MainPage")
//文章列表
beego.Router("/posts", &controllers.UserController{}, "get:Posts")
//添加文章
beego.Router("/addposts", &controllers.UserController{}, "get:AddPosts")
//添加文章提交
beego.Router("/addpostspost", &controllers.UserController{}, "post:AddPostsPost")
//文章详情页
beego.Router("/showposts", &controllers.UserController{}, "get:ShowPosts")
//文章编辑页
beego.Router("/editposts", &controllers.UserController{}, "get:EditPosts")
//文章编辑提交页
beego.Router("/editpostspost", &controllers.UserController{}, "post:EditPostsPost")
//个人信息
beego.Router("/profile", &controllers.UserController{}, "get:Profile")
//个人信息提交
beego.Router("/profilepost", &controllers.UserController{}, "post:ProfilePost")
}
beego.Run()完成了以下事情:
解析配置文件
- beego 会自动解析在 conf 目录下面的配置文件 app.conf,通过修改配置文件相关的属性,我们可以定义:开启的端口,是否开启 session,应用名称等信息。
- 执行用户的 hookfunc
beego 会执行用户注册的 hookfunc,默认的已经存在了注册 mime,用户可以通过函数 AddAPPStartHook 注册自己的启动函数。
- 是否开启 session
会根据上面配置文件的分析之后判断是否开启 session,如果开启的话就初始化全局的 session。
- 是否编译模板
beego 会在启动的时候根据配置把 views 目录下的所有模板进行预编译,然后存在 map 里面,这样可以有效的提高模板运行的效率,无需进行多次编译。
- 是否开启文档功能
根据 EnableDocs 配置判断是否开启内置的文档路由功能
- 是否启动管理模块
beego 目前做了一个很酷的模块,应用内监控模块,会在 8088 端口做一个内部监听,我们可以通过这个端口查询到 QPS、CPU、内存、GC、goroutine、thread 等统计信息。
- 监听服务端口
这是最后一步也就是我们看到的访问 8080 看到的网页端口,内部其实调用了 ListenAndServe,充分利用了 goroutine 的优势