Beego是一个基于Go语言开发的web框架,beego是一个快速开发Go应用的http框架,go 语言方面技术大牛。beego可以用来快速开发API、Web、后端服务等各种应用,是一个RESTFul的框架,主要设计灵感来源于tornado、sinatra、flask这三个框架,但是结合了Go本身的一些特性(interface、struct继承等)而设计的一个框架。
其实对于语言层面来说,我们只需要基本上了解基础的语法既可。面对于实际开发,可能实操会令我们的Coding能力增加的非常快。之前崇拜W7ay大佬,我想拥有代码强迫症,尽量代码多写注释、变量命名驼峰、格式对其。
直接从实战开始,我老婆负责Web前端的页面制作,我主要负责后端制作,以及功能研发。做一个安全平台,结合多种安全必备的产品研发(端口扫描器、web漏洞扫描器、waf平台等为一体),充分积累我和老婆的web研发实战经验,为升值加薪努力拼命。
到这里时,我们已经安装好了Go语言的环境,Go语言是自带包管理器,使用go get 可以直接从github上面获取代码。特别方便,下面这两句就是获取Beego的命令。第一句是获取beego的库的sdk、第二句是获取beegod管理工具—bee。
//安装beego环境
go get github.com/astaxie/beego
//安装bee工具
go get github.com/beego/bee
这样下载的beego和bee的文件会自动的存在于go语言的环境下面,我们这时候需要注意有没有在go语言的bin目录下面是否存在有bee的exe文件。如果Bee文件存在,则可下面使用命令创建第一个Beego的项目。
//使用Bee直接创建beego项目
bee new your_projectname
这样,bee就会自动的在我们的go目录下面的src目录下创建名称为your_projectname的工程。下面就是其的目录树
├── conf //配置文件
│ └── app.conf
├── controllers //控制器
│ ├── admin
│ └── default.go
├── main.go //项目入口
├── models //模型
│ └── models.go
├── routers //路由
│ └──router.go
├── static //静态文件
│ ├── css
│ ├── ico
│ ├── img
│ └── js
└── views //界面模板
├── admin
└── index.tpl
可以看到,Bee为我们自动创了一个项目的壳子。运行项目试试,使用如下的bee命令
//直接在新创建的工程下打开cmd使用下面语句则可以直接运行beego项目
bee run
使用bee运行beego项目,bee会先build该beego项目,然后运行此项目。当输出project_name.exe is running的时候,我们的项目已经正常运行了。我们打开浏览器试试。
输入本地回环地址,就可以看到beego已经输出宣传页面了。我们继续来看一看beego的目录,conf文件夹是放着Beego整个项目的基础配置,bee已经为我们自动的创建了一个模板conf。还有其他的配置,后面我们用到了再进行补充。
├── conf //配置文件
│ └── app.conf
//app.conf文件的内容
appname = Yourprojectname //beego项目的名称
httpport = 80
//beego默认是开启8080端口,我在这儿将它修改为了80端口,若修改为其余端口,在浏览器打开需要使用回环地址加上端口的形式访问
runmode = dev
//运行模式,这里的默认模式是开发模式
接下来,继续分析Beego的主文件main.go,其代码结构如下所示,首先我们需要指定包,主文件对应了main包。import引入了项目的routers包,以及beego的sdk。可以看到,在beego引入routers文件夹的前面有一个下的下划线,当这样引用时,go语言解释器会首先去寻找routers下面的init函数,然后执行init函数后再跳回主文件。然后在程序的main方法里面,直接使用beego.run就可以了。
package main
import (
_ "WeiZsec/routers" //routers里面放的是后端的路由(也就是url所指定的路径对应到处理函数处理任务)
"github.com/astaxie/beego" //引入Beego的sdk
)
func main() {
beego.Run()
}
routers做为理由,是后端程序的门牌所在,我们下面看看里面是怎样进行路由<---->函数对应的。在router包里面,会存在一个init函数,这个函数里面,写的是需要路由的链接比如(/),代表直接访问时候的输出。后面&controllers.MainController就是当我们访问域名的时候的输出。这就是MVC中的C(控制器)。
package routers
import (
"WeiZsec/controllers" //引用controller包
"github.com/astaxie/beego" //引入Beego的sdk
)
func init() {
beego.Router("/", &controllers.MainController{})
}
controller包是为路由对应处理函数的包,当用户访问某个链接,或者前端需要某些数据的时候,会发送一段http请求,经过路由转到对应的controller函数来处理。下面就是controller包的代码内容。
package controllers
import (
"github.com/astaxie/beego" //引入Beego的sdk
)
//创建一个结构体,并添加beego.Controller函数组合,就可以使用该结构体去获取http请求传回来的内容
type MainController struct {
beego.Controller
}
Get()方法
//beego.Controller实现了Init、Prepare、Post、Get、Delete、Head等函数,这儿重写了Get()函数
func (c *MainController) Get() {
//在get函数里面,我们可以使用c.data来定义我们传输给模板的内容,相当于键值对
c.Data["Website"] = "beego.me"
c.Data["Email"] = "[email protected]"
//传入两个键值之后,引入了主页面模板,相当于是MVC中的View层
c.TplName = "index.tpl"
}
下面我们来看一看index.tpl文件,可以发现在文件里面直接使用{{.Website}},就能获取到我们上面定于的“beego.me"的值,同理{{.Email}}也是。
<html>
<head>
<title>Beegotitle>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
head>
<body>
<header>
<h1 class="logo">Welcome to Beegoh1>
<div class="description">
Beego is a simple & powerful Go web framework which is inspired by tornado and sinatra.
div>
header>
<footer>
<div class="author">
Official website:
<a href="http://{{.Website}}">{{.Website}}a> /
Contact me:
<a class="email" href="mailto:{{.Email}}">{{.Email}}a>
div>
footer>
<div class="backdrop">div>
<script src="/static/js/reload.min.js">script>
body>
html>
就这样我们基本上的了解了beego的安装部署,以及简单的了解了beego的目录结构。