初识beego
beego简介
beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。
beego 是基于八大独立的模块构建的,充分体现了功能模块化。是一个高度解耦的框架。
cache、config、context、httplibs、logs、orm、session、toolbox
用户即使不使用 beego 的 HTTP 逻辑,也依旧可以使用这些独立模块。
例如:你可以使用 cache 模块来做你的缓存逻辑;使用日志模块来记录你的操作信息;使用 config 模块来解析你各种格式的文件。
beego 不仅可以用于 HTTP 类的应用开发,这也是 beego 为什么受欢迎的一个原因。就像乐高积木一样,通过一个个模块就可以搭建出不同的应用。
beego安装
安装beego
beego 的安装是典型的 Go 安装包的形式。(前提当然已经安装好了go)
go get github.com/astaxie/beego
安装bee
bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 您可以很容易的进行 beego 项目的创建、热编译、开发、测试、和部署。
go get github.com/beego/bee
添加环境变量
bee 可执行文件默认存放在 $GOPATH/bin
里面,需要把 $GOPATH/bin
添加到环境变量中。
创建项目
bee new hello //创建web项目
bee api hello //创建api项目
api项目只是比web项目少了 static 和 views 目录,多了一个 test 模块,用来做单元测试的。这里以web项目为例
项目位置
go
|-- bin
|-- pkg
|-- src
| |-- hello //创建的项目
项目目录结构
hello //项目名称
|-- conf
-- app.conf //配置文件
|-- controllers
-- default.go //控制器文件
|-- models
|-- routers
-- router.go //路由文件
|-- static
| |-- css
| |-- img
| |-- js
|-- tests
-- default_test.go
|-- views
-- index.tpl //模板文件
-- main.go //入口文件
实际项目中前后台分离,需要增加后台目录,目录结构可能变成这样
hello //项目名称
|-- conf
-- app.conf //配置文件
|-- controllers
| |-- admin //后台控制器目录
-- default.go //前台控制器文件
|-- models
|-- routers
-- router.go //路由文件
|-- static
| |-- css
| |-- img
| |-- js
|-- tests
-- default_test.go
|-- views
| |-- admin //后台模板目录
-- index.tpl //前台模板文件
-- main.go //入口文件
运行项目
cd hello
bee run
浏览器输入localhost:8080
就可以看到beego欢迎页面了。
Go 本身已经做了网络层的东西,beego 封装了一下,所以可以做到不需要 nginx 或 apache就可以在浏览器访问(beego沿用Go的默认端口8080)。但正式项目中还是需要专门的ngingx或apache这种web服务器。
入口文件 main.go
package main
import (
_ "quickstart/routers"
"github.com/astaxie/beego"
)
func main() {
beego.Run()
}
beego.Run 执行
-
解析配置文件app.conf。
可以配置端口、是否开启 session、应用名称等信息 -
执行用户的 hookfunc。
默认的已经存在了注册 mime,用户可以通过函数 AddAPPStartHook 注册自己的启动函数。 -
是否开启 session。
会根据上面配置文件的分析之后判断是否开启 session,如果开启的话就初始化全局的 session。 -
是否编译模板。
根据配置把 views 目录下的所有模板进行预编译,然后存在 map 里面,这样可以有效的提高模板运行的效率,无需进行多次编译。 -
是否开启文档功能。
根据 EnableDocs 配置判断是否开启内置的文档路由功能 -
是否启动管理模块。
beego 目前做了一个很酷的模块,应用内监控模块,会在 8088 端口做一个内部监听,我们可以通过这个端口查询到 QPS、CPU、内存、GC、goroutine、thread 等统计信息。 -
监听服务端口。
这是最后一步也就是我们看到的访问 8080 看到的网页端口,内部其实调用了 ListenAndServe,充分利用了 goroutine 的优势