golang学习笔记6 beego项目路由设置
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 如何来处理逻辑的。
---------------------------
最新文章
- 多层iframe的页面取子标签
- win7-32 系统 + VS2010 配置 glew
- SlidingMenu实现app侧滑功能
- Angular学习(3)- 双向梆定
- 学渣也要搞 laravel(3)—— HTTP控制器
- 2015第43周三memcached
- 【免费】iPhone上最好用的短信群发软件: 高速短信4.1
- 在textarea的内容后面增加内容
- Solr(五)Solr实现简单的类似百度搜索高亮功能-2代码
- windows平台下 c/c++进行http通信的教训
- rhel配置网络yum源
- Ftp主动模式和被动模式以及java连接ftp模式设置
- [20181214]open file using O_DIRECT.txt
- JQuery : 插件定义
- 目标检测(七)YOLOv3: An Incremental Improvement
- ssh 22端口号拒绝
- sqlite 一条记录判断一个字段是否like另一个字段
- 微信小程序-开心大转盘(圆盘指针)代码分析
- 深度学习课程笔记(八)GAN 公式推导
- tomcat 防火墙如何设置
热门文章
- SHOW STATUS 查看各种类型SQL执行的频率
- MongoDB update修改器: 针对Arrays的$修改器 $push $pull $pop
- Python3学习之路~3.2 递归、函数式编程、高阶函数、匿名函数、嵌套函数
- 【剑指offer】数组中出现次数超过一半的数字
- NYOJ 最长公共子序列
- js小数点精度问题
- 实时Cartographer测试(1) - rplidar
- [py]__name__ 属于哪个文件
- react 使用 redux 的时候 用 ref获取子组件的state
- ICSharpCode.TextEditor使用及扩展