网站首页 » Beego » Beego 项目执行过程

Beego 项目执行过程

June 27, 2020 Beego

前面我们已经创建了 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()
}

2020-06-27T00:39:18.png
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 的优势

添加新评论