01
介绍
beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。
beego 架构:
beego 是基于八大独立的模块构建的,是一个高度解耦的框架。
当初设计 beego 的时候就是考虑功能模块化,用户即使不使用 beego 的 HTTP 逻辑,也依旧可以使用这些独立模块,例如:你可以使用 cache 模块来做你的缓存逻辑;使用日志模块来记录你的操作信息;使用 config 模块来解析你各种格式的文件。
所以 beego 不仅可以用于 HTTP 类的应用开发,在你的 socket 游戏开发中也是很有用的模块,这也是 beego 为什么受欢迎的一个原因。
大家如果玩过乐高的话,应该知道很多高级的东西都是一块一块的积木搭建出来的,而设计 beego 的时候,这些模块就是积木,高级机器人就是 beego。
beego 执行逻辑:
02
安装 beego v2
因为截至本文发稿前,beego v2 正式版还没有发布,所以我们通过安装 beego 的 develop 分支,使用 beego v2。
我们使用 bee 工具生成 web 项目,bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 您可以很容易的进行 beego 项目的创建、热编译、开发、测试、和部署。关于 bee 工具的更多用法,请参阅官方文档。
截至本文发稿前,bee v2 正式版也还没有发布,所以我们通过安装 bee 的 develop 分支,使用 bee v2。
- 安装 bee v2.0.0
go get github.com/beego/bee@develop
- 查看 bee 版本
bee version
- 如果可以输出版本信息,证明 bee 工具安装成功。(bug:使用 bee 工具查询版本,显示的 beego 版本信息不对。)
- 新建 web 项目(bug:bee 工具生成 web 项目,使用的 beego v1.12.1)
bee new web
- 升级到 beego v2.0.0
cd web go get -u github.com/astaxie/beego@develop
- 运行
bee run
- cURL访问
curl -G http://localhost:8080
03
快速入门
web 项目的目录结构:
web ├── config │ └── app.conf ├── controllers │ └── default.go ├── go.mod ├── go.sum ├── main.go ├── models ├── routers │ └── router.go ├── static │ ├── css │ ├── img │ └── js │ └── reload.min.js ├── tests │ └── default_test.go └── views └── index.tpl
从上面的目录结构我们可以看出来 M(models 目录)、V(views 目录)和 C(controllers 目录)的结构, main.go 是入口文件。
阅读 bee 工具生成的 web 项目代码,main.go 文件导入 routers 包,main 函数调用 beego.Run() 方法,监听默认端口 8080。
package main import ( _ "web/routers" beego "github.com/astaxie/beego/server/web" ) func main() { beego.Run() }
阅读 routers/router.go 文件,init 函数调用beego.Router() 方法,注册路由,第一个参数传入 URI,第二个参数传入Controller。
package routers import ( "web/controllers" beego "github.com/astaxie/beego/server/web" ) func init() { beego.Router("/", &controllers.MainController{}) }
阅读 controllers/default.go 文件,声明一个名为 MainController 的结构体,并且实现 Get 方法,Get 方法指定模板文件。
package controllers import ( beego "github.com/astaxie/beego/server/web" ) type MainController struct { beego.Controller } func (c *MainController) Get() { c.Data["Website"] = "beego.me" c.Data["Email"] = "astaxie@gmail.com" c.TplName = "index.tpl" }
阅读 views/index.tpl 文件,使用模板标签语法,渲染数据。
<footer> <div class="author"> Official website: <a href="http://{{.Website}}">{{.Website}}</a> / Contact me: <a class="email" href="mailto:{{.Email}}">{{.Email}}</a> </div> </footer>
04
总结
本文开篇介绍了 beego 是什么,beego 的架构和 beego 的执行逻辑,然后介绍了安装 beego v2 的步骤,最后介绍了 bee 工具生成的 web 项目目录结构和代码解读。