Go 框架之 Beego 简介部署及程序流程分析
Beego简介
beego 是一个使用 Go 语言来开发WEB应用的GoWeb框架,该框架起始于 2012 年,由一位中国的程序员编写并进行公开,其目的就是为大家提供一个高效率的 web 应用开发框架。该框架采用模块封装,使用简单,容易学习。方便技术开发者快速学习并进行实际开发。对程序员来说,beego 掌握起来非常简单,只需要关注业务逻辑实现即可,框架自动为项目需求提供不同的模块功能。 在对 beego 框架有了一个简单基本的了解之后,我们给大家介绍一下 beego 的一些特性。
Beego框架的主要特性
1)简单化:RESTful 支持,MVC 模型;可以使用 bee 工具来提高开发效率,比如监控代码修改进行热编译,自动化测试代码,以及自动化打包部署等丰富的开发调试功能。
2)智能化:beego 框架封装了路由模块,支持智能路由,智能监控,并可以监控内存消耗,CPU 使用以及 goroutine 的运行状况,方便开发者对线上应用进行监控分析。
3)模块化:beego 根据功能对代码进行节耦封装,形成了 Session,Cache,Log,配置解析,性能监控,上下文操作,ORM 等独立的模块,方便开发者进行使用。
4)高性能:beego 采用 Go 原生的 http 请求,goroutine 的并发效率应付大流量的 Web 应用和 API 应用。
beego 的几个特性
一方面在面试过程中,如果有面试官问起大家关于 goweb 开发的相关知识的时候,有可能问 beego 框架有优势或者有什么特点,这个时候需要大家能够对 beego 框架这些特点做一个介绍; 另一方面,咱们在后面实际的学习和编码过程中,大家感受一下这些特性在实际项目中为我们带来的便利和高效。
beego 安装
我们使用 go get
命令来进行 beego 的安装。
注意
在安装的时候,有一点大家要注意,beego 框架要求 Go 语言版本 1.1+ 以上,这个我们大家的版本应该至少也是 1.9 的吧,应该都没有。或者大家现在在命令行中,执行
go version
查看一下自己的 go 语言版本,如下所示:
添加环境变量
cat .bash_profile
export GOROOT=/usr/local/go
export GOARCH=amd64
export GOOS=darwin
export GOPATH=/Users/youmen/Go_wunai
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOPATH/bin
安装 beego
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
ulimit -n 5000
go get -u github.com/astaxie/beego
go get -u github.com/beego/bee
bee new beego
cd ${GOPATH}/src
// cd 进入项目目录
// 输入 go mod init
bee run
// 如果想编译成 linux 可以直接执行的二进制文件
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build hello.go
命令行工具 Bee
现在,尝试来进行对代码进行修改,就简单的添加一行打印日志:beego.Info("代码修改")。这个时候,如果我们要想让代码生效,必须把原来正在执行的程序停止,然后重新执行编码和运行命令,我们来实际尝试一下。 经过我们的尝试,我们可以发现,确实第二次的重新启动的程序打印出了两条后台日志,这说明我们修改的代码生效了。
bee 简介
bee 是一个开发工具,是协助 Beego 框架开发项目时进行创建项目,运行项目,热部署等相关的项目管理的工具。beego 是源码,负责开发,bee 是工具,负责构建和管理项目。介绍 beego 的特性的时候说过其中一点 beego 支持代码热部署吧。所谓热部署就是,当修改代码的时候,可以不用停止服务重新启动,内置的 beego 就能够实时感知源代码程序编码,并进行实时生效,这就是热部署,这样就大大方便了开发人员和维护人员要频繁的进行服务停止,服务重启的过程。
Bee 安装
如同 beego 一样,如果要使用 bee,首先要进行安装,同样的道理,先使用
go get
命令安装 bee 工具。bee 安装命令:
go get github.com/beego/bee
Bee 功能命令
安装结束以后,进入到
GOPATH
对应的目录中,然后进入到 bin 目录下,可以看到有 bee 这个可执行文件,这就是安装的 bee 工具的可执行文件,在该目录中,我们在终端中执行以下bee
命令,然后回车,会发现列出很多关于 bee 的用法,如下图:
new 命令
// bee new ProjectName
该命令表示新建一个全新的 web 项目,有一点需要注意:该命令必须在
src
目录下执行,才能生效,自动生成 web 项目的目录结构。如果在其他目录下面执行bee new
命令,也同样会是在 src 目录下面生成对应新项目的目录结构,这是 bee 工具在构建项目的时候默认寻找创建的目录。
api 命令
// bee api ProjectNames
该命令表示用来创建开发 API 应用。很多用户写前端的后台接口也是通过 go`来写,因此 bee 专门提供了一个写 api 接口应用的命令。通过目录结构可以看到,和 Web 项目相比,API 项目少了 static 和 views 目录,多了一个 test 目录,test 是用来进行写测试用例代码的。
run 命令
// bee run
命令用来运行项目,并且能够通过监控文件系统,实时进行代码的热部署更新。也就是,我们代码逻辑进行了修改,不用停止应用,在前端页面就能看到改变。
pack 命令
// bee pack
pack
命令用来发布应用的时候的打包操作,该命令会把项目大包成 zip 包,然后我们就可以在部署的时候直接把大包后的项目上传到服务器,然后解压进行部署。
version 命令
// bee version
Version 命令来查看当前 bee,beego,go 的版本。
使用 Bee 工具
常见的几个 bee工具命令就是上面的几个,立即来练习使用一下。打开命令行终端,进入到
GOPATH
所对应的目录,然后进入到 src 目录中。
创建项目
使用
bee run
命令来新建一个案例项目,比如我们新建一个 BeegoDemo2 的项目,我们执行命令:bee new BeegoDemo2
,命令执行效果如下:
bee new test
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v1.11.0
2020/07/25 16:35:17 WARN ▶ 0001 You current workdir is not inside $GOPATH/src.
2020/07/25 16:35:17 INFO ▶ 0002 Creating application...
create /Users/youmen/Go_wunai/src/test/
create /Users/youmen/Go_wunai/src/test/conf/
create /Users/youmen/Go_wunai/src/test/controllers/
create /Users/youmen/Go_wunai/src/test/models/
create /Users/youmen/Go_wunai/src/test/routers/
create /Users/youmen/Go_wunai/src/test/tests/
create /Users/youmen/Go_wunai/src/test/static/
create /Users/youmen/Go_wunai/src/test/static/js/
create /Users/youmen/Go_wunai/src/test/static/css/
create /Users/youmen/Go_wunai/src/test/static/img/
create /Users/youmen/Go_wunai/src/test/views/
create /Users/youmen/Go_wunai/src/test/conf/app.conf
create /Users/youmen/Go_wunai/src/test/controllers/default.go
create /Users/youmen/Go_wunai/src/test/views/index.tpl
create /Users/youmen/Go_wunai/src/test/routers/router.go
create /Users/youmen/Go_wunai/src/test/tests/default_test.go
create /Users/youmen/Go_wunai/src/test/main.go
2020/07/25 16:35:17 SUCCESS ▶ 0003 New application successfully created!
项目结构
cd ${GOPATH}/src
tree test
go mod init
test
├── conf
│ └── app.conf
├── controllers
│ └── default.go
├── main.go
├── models
├── routers
│ └── router.go
├── static
│ ├── css
│ ├── img
│ └── js
│ └── reload.min.js
├── tests
│ └── default_test.go
└── views
└── index.tpl
运行项目
bee run
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v1.11.0
2020/07/25 16:37:40 INFO ▶ 0001 Using 'test' as 'appname'
2020/07/25 16:37:40 INFO ▶ 0002 Initializing watcher...
go: finding module for package github.com/astaxie/beego
go: found github.com/astaxie/beego in github.com/astaxie/beego v1.12.2
test/controllers
test/routers
2020/07/25 16:37:43 SUCCESS ▶ 0003 Built Successfully!
2020/07/25 16:37:43 INFO ▶ 0004 Restarting 'test'...
2020/07/25 16:37:43 SUCCESS ▶ 0005 './test' is running...
2020/07/25 16:37:44.611 [I] [asm_amd64.s:1373] http server Running on http://:8080