golang学习笔记5 beego项目路由设置

前面我们已经创建了 beego 项目,而且我们也看到它已经运行起来了,那么是如何运行起来的呢?让我们从入口文件先分析起来吧:

package main

import (
_ "quickstart/routers"
"github.com/astaxie/beego"
) func main() {
beego.Run()
}

  我们看到 main 函数是入口函数,但是我们知道 Go 的执行过程是如下图所示的方式:

这里我们就看到了我们引入了一个包 _ "quickstart/routers",这个包只引入执行了里面的 init 函数,那么让我们看看这个里面做了什么事情:

package routers

import (
"quickstart/controllers"
"github.com/astaxie/beego"
) func init() {
beego.Router("/", &controllers.MainController{})
}

  

路由包里面我们看到执行了路由注册 beego.Router, 这个函数的功能是映射 URL 到 controller,第一个参数是 URL (用户请求的地址),这里我们注册的是 /,也就是我们访问的不带任何参数的 URL,第二个参数是对应的 Controller,也就是我们即将把请求分发到那个控制器来执行相应的逻辑,我们可以执行类似的方式注册如下路由:

beego.Router("/user", &controllers.UserController{})

这样用户就可以通过访问 /user 去执行 UserController 的逻辑。这就是我们所谓的路由,更多更复杂的路由规则请查询 beego 的路由设置

再回来看看 main 函数里面的 beego.Run, 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 的优势

一旦 run 起来之后,我们的服务就监听在两个端口了,一个服务端口 8080 作为对外服务,另一个 8088 端口实行对内监控。

通过这个代码的分析我们了解了 beego 运行起来的过程,以及内部的一些机制。接下来让我们去剥离 Controller 如何来处理逻辑的。

---------------------------

 QQ群:golang beego技术交流群(316397059)

最新文章

  1. 多层iframe的页面取子标签
  2. win7-32 系统 + VS2010 配置 glew
  3. SlidingMenu实现app侧滑功能
  4. Angular学习(3)- 双向梆定
  5. 学渣也要搞 laravel(3)—— HTTP控制器
  6. 2015第43周三memcached
  7. 【免费】iPhone上最好用的短信群发软件: 高速短信4.1
  8. 在textarea的内容后面增加内容
  9. Solr(五)Solr实现简单的类似百度搜索高亮功能-2代码
  10. windows平台下 c/c++进行http通信的教训
  11. rhel配置网络yum源
  12. Ftp主动模式和被动模式以及java连接ftp模式设置
  13. [20181214]open file using O_DIRECT.txt
  14. JQuery : 插件定义
  15. 目标检测(七)YOLOv3: An Incremental Improvement
  16. ssh 22端口号拒绝
  17. sqlite 一条记录判断一个字段是否like另一个字段
  18. 微信小程序-开心大转盘(圆盘指针)代码分析
  19. 深度学习课程笔记(八)GAN 公式推导
  20. tomcat 防火墙如何设置

热门文章

  1. SHOW STATUS 查看各种类型SQL执行的频率
  2. MongoDB update修改器: 针对Arrays的$修改器 $push $pull $pop
  3. Python3学习之路~3.2 递归、函数式编程、高阶函数、匿名函数、嵌套函数
  4. 【剑指offer】数组中出现次数超过一半的数字
  5. NYOJ 最长公共子序列
  6. js小数点精度问题
  7. 实时Cartographer测试(1) - rplidar
  8. [py]__name__ 属于哪个文件
  9. react 使用 redux 的时候 用 ref获取子组件的state
  10. ICSharpCode.TextEditor使用及扩展