1.1软件框架
一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来。 一个软件框架是由其中各个软件模块组成的,每一个模块都有特定的功能,模块与模块之间通过相互配合来完成软件的开发。 软件框架是针对某一类软件设计问题而产生的。 作用:避免重复造轮子(写重复代码)
1.2beego
beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 MVC 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。
1.3MVC
M: Model,模型,数据库操作,增删改查
V: View,视图, 接收C传输的数据,组织html界面
C: Controller,控制器, 接收数据,数据处理,传输数据给M和V并接收应答,返回应答给浏览器
通过浏览器注册用户信息。
1.4环境安装
需要安装或者升级 Beego 和 Bee 的开发工具:
$ go get -u github.com/astaxie/beego
$ go get -u github.com/beego/bee
安装完之后,bee 可执行文件默认存放在 GOPATH/bin 添加到您的环境变量中,才可以进行下一步
$ echo 'export PATH="$GOPATH/bin:$PATH"' >> ~/.bashrc
$ source .bashrc
安装好之后,运营bee new quickstart来创建一个项目,注意:通过bee创建的项目代码都是在$GOPATH/src目录下面。
生成的项目目录结构如下:
进入项目目录执行bee run命令,在浏览器输入网址:127.0.0.1:8080,显示如下:
1.5 beego的项目结构分析
从上面的目录结构我们可以看出来 M(models 目录)、V(views 目录)和 C(controllers 目录)的结构, main.go 是入口文件。
1.6项目路由设置
打开我们项目的入口main.go
package main import (
_ "quickstart/routers"
"github.com/astaxie/beego" ) func main() { beego.Run() } 我们知道main函数是整个项目的入口并且go的执行过程如下图所示:
这时候我们就发现了main里面导入了"quickstart/routers",并且执行了这个包里面的init函数,routers包的内容如下:
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 的逻辑。这就是我们所谓的路由(要在controllers包里面有名字为UserController才能调用)
1.7ORM
beego中内嵌了ORM框架,ORM框架可以将结构体和数据表进行对应起来,只需要通过结构体和对象就可以对数据表进行操作。
设计类:模型类。 ORM另外一个作用:根据设计的类生成数据库中的表。
安装ORM go get github.com/astaxie/beego/orm
go get -u github.com/go-sql-driver/mysql // 设置数据库基本信息
orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/test1?charset=utf8")
// 映射model数据
orm.RegisterModel(new(Book))
// 生成表
orm.RunSyncdb("default", false, true)
1.7.1 ORM对数据进行操作
插入
o := orm.NewOrm()
var user User
user.Name = "slene"
user.Pwd= true
id, err := o.Insert(\&user)
if err == nil {
fmt.Println(id)
}
查询
o := orm.NewOrm()
user := User{Id: 1}
err := o.Read(\&user)
也可以指定字段查询
user := User{Name: "slene"}
err = o.Read(\&user, "Name")
更新
o := orm.NewOrm()
user := User{Id: 1}
if o.Read(\&user) == nil {
user.Name = "MyName"
if num, err := o.Update(\&user); err == nil {
fmt.Println(num)
}
}
也可以指定更新的字段
// 只更新 Name
o.Update(\&user, "Name")
// 指定多个字段
// o.Update(\&user, "Field1", "Field2", ...)
删除
o := orm.NewOrm()
if num, err := o.Delete(\&User{Id: 1}); err == nil {
fmt.Println(num)
}